Headless Steam Big Picture Streaming

2 minute read

Introduction

In both of our homes I have a Unix server for a variety of uses, but something that has been on interest for awhile was Steam in Home Streaming. In essence it takes the frame buffer of the video card and remotely displays it on any other machine running Steam.

The benefit, for me at least, is two-fold. It is cheaper and easier to drop a GPU into the server than it is to upgrade the laptop and it allows for me to have a remote OpenCL machine that I use in my security research.

As the machine is in the closet and headless, a few things had to be done for this to work. I am sharing my notes for others to use as needed. This home server uses Arch Linux so the instructions are geared towards that config.

The specs of the machine:

  • Dell T20 Server
  • MSI Nvidia GTX 750ti
    • I chose this card for the ease of attaching to VFIO
  • CompuLab Display Emulator
    • Without this little device, the Nvidia card would top out at 800x600 due to the lack of EDID data. This just allows me to bypass

Prerequisites

LightDM Configuration

I chose to run Steam under a dedicated user fully segmented and jailed from the rest of the system since it is an autologin user.

` /etc/lightdm/lightdm.conf `

[LightDM]
start-default-seat=true
run-directory=/run/lightdm

[Seat:*]
type=local
pam-service=lightdm
pam-autologin-service=lightdm-autologin
session-wrapper=/etc/lightdm/Xsession
autologin-user=steamuser
autologin-user-timeout=0

[VNCServer]
enabled=true
command=Xvnc -rfbauth /etc/vncpasswd
port=5900
listen-address=localhost
width=1280
height=1024
depth=24

I enabled the VNC Server to ensure I could remotely access the Big Picture session as needed. In between some of the beta client updates my account would logout randomly. This will also allow you to access for the initial install.

User Configuration

I called my user, get this, steamuser :grin:

` sudo groupadd -r autologin`

` sudo groupadd -r nopasswdlogin`

` sudo useradd -m -g autologin,nopasswdlogin steamuser `

Since LightDM uses PAM we need to modify the configuration in ` /etc/pam.d/lightdm ` with the first two lines being the biggies. If you have any type of custom pam modules just be aware before editing this file entirely or overwriting.

#%PAM-1.0
auth        sufficient  pam_succeed_if.so user ingroup nopasswdlogin
auth        include     system-login
-auth       optional    pam_gnome_keyring.so
account     include     system-login
password    include     system-login
session     include     system-login
-session    optional    pam_gnome_keyring.so auto_start

Now to enable and/or restart LightDM with ` sudo systemctl enable lightdm && sudo systemctl restart lightdm `

VNC

As we would never leave our VNC server with no password, let’s take care of that option. If you want your VNC server to listen on the local network be sure to change the listen-address in the lightdm.conf section above. I just use SSH tunnels to encrypt.

` sudo vncpasswd /etc/vncpasswd `

Steam Client

Be sure to VNC into your machine which should automatically login to your new Steam Users’s Big Picture desktop. Install all the games you want and off you go! Keep in mind that after you logout of the VNC session your steam client will end (and thereby the in-house Streaming) so after you have things configured I always recommend a bounce of lightdm via ` sudo systemctl restart lightdm `.

Notes

Keep in mind that you are able to add applications to the Big Picture mode in the settings. Due to the speed of frame buffer streaming, I have added Firefox, gnome-terminal, and a few other apps that are useful for remote administration.

Updated: