Wednesday, November 18, 2015

Arch Linux Chroot on Steam Link (Easy Setup)

Alright, this should be a much more user-friendly method of getting an Arch Linux chroot going on your steam link. But by doing it this way you're going to have to have some trust in me as we're going to be downloading and running a shell script that could potentially screw up your Steam Link. Its very un-likely though, more likely is losing important data on any storage devices you may have plugged into the Link.

So first things first you're going to need a USB HDD or pendrive that you don't care about as all of the data on it needs to be wiped. After you're certain that this storage device has nothing important on it plug it into the steam link. Then you're going to need SSH access to your steam link, after you've SSH'd into your steam link do `busybox sh` to switch to a better shell with tab auto-completion. Now do `cd` to enter /home/steam/ then do `wget http://fgthou.se/steamlink/create-chroot-device.sh` to download my script that will automate turning the storage device you have plugged in into the chroot 'system'. Next do `chmod +x create-chroot-device.sh` this will make the script executable. Now if you're a little Linux savvy make sure that you only have one device in /dev/block/sd* if you have anything other than sda[1-9] then you might want to double check that nothing else is plugged into the Steam Link. If you don't know what any of that means or you're sure that nothing else is plugged into the Link do `./create-chroot-device.sh /dev/block/sda` this will start the script on your plugged in device. It will ask you to type yes in order to continue, do so when you're ready to wipe the plugged in device (last chance!).

Now it will proceed to partition and format the drive. Then it will install my pre-built chroot environment onto it. This may take a while but after its done you can do `cd /mnt/chroot` and then do `./dochroot.sh` and you'll be in a Arch Linux environment. When you're done hit Ctrl+D until you get 'Syncing filesystem...' this will make sure you don't lose any data in the chroot when you're done.

After you power-off the Steam Link /mnt/chroot won't exist anymore. To re-mount it do `mkdir /mnt/chroot` and then `mount /dev/block/sda1 /mnt/chroot`. Now you can `cd /mnt/chroot` and `./dochroot.sh` again.

As a side note anyone with Linux experience might notice the /home/steam/usbip folder. In it is usbip for the Linux 3.8.13 kernel which is on the Steam Link. I'm still working on how to get it working with windows but if you already know what usbip is feel free to try it out.

Arch Linux Chroot on Steam Link (Manual Setup)

Note: If you don't have access to a Linux desktop you can use this method instead.

I'm going to try and help you guys setup an Arch Linux chroot environment on your steam link. If you don't know what SSH or Linux is then this post isn't for you. First things first you'll need to have ssh access to your steam link. Below I'm going to detail setting this up with my pre-created tar file on a Linux desktop, if you don't want to use my premade one I'll detail how I made it at the end. If you're on Windows just wait it out, I'll do a post for it later.


First you'll need a separate pendrive or usb hdd to run the chroot environment on. You need to format this harddrive/pendrive to have an ext4 partition on it that the chroot will be on. You'll need to make this partition at least 1GB, the extracted tar file is roughly 700Mb but you'll want some spare room for pacman updates ect. After you've created your ext4 partition mount it on your desktop and un-tar the steamlink-chroot.tar.gz above onto the new ext4 partition. So the root of the ext4 partition will have one file and one folder: chrootdir and dochroot.sh. 

After you've correctly done the above you can un-mount the ext4 formatted drive and insert it into your steam link. Then SSH into the Link and do `busybox sh` this will switch you to the busybox shell instead of the ash shell which doesn't have tab completion. So now any directories or commands you need to type in you can hit tab to auto-complete them. Now `cd /mnt` to go into the mnt directory and create a folder to mount your drive onto (`mkdir chroot`). Then `cd chroot` to go into the drive and do `ls` to make sure your dochroot.sh script is there. Now you can do `./dochroot` and it should drop you into your new Arch Linux chroot. `pacman -Syu` will update your install. When you're done with the chroot hit Ctrl+D until it says 'Syncing filesystem...' that way you wont lose any data in your chroot. Now you can close the SSH session.

Be sure to read the Arch Linux Wiki for any questions about Arch Linux.





So the reason why I had to tar up a bootstrap for you guys is because the Steam Link doesn't ship with bash so the arch-bootstrap script doesn't run on the vanilla system. In order to get it to run to setup the initial bootstrap I had to download bash and all its dependencies from the archlinuxarm site. If you want to setup the bootstrap yourself without my premade tar file then download: bash, glibc, ncurses, and readline from the archlinuxarm site above. Then set your LD_LIBRARY_PATH to /lib and the usr/lib from the packages downloaded above. Now you should be able to do ./usr/bin/bash arch-bootstrap.sh -a arm to create your initial bootstrap. After that's done you'll want to use my dochroot.sh file in the steamlink-chroot.tar or manually mount dev, proc, and sys into your chroot environment. A fun note for those who notice, /home/steam/usbip has the usbip userspace tools and the kernel modules in it. In the future I'll try and make a post about using usbip to use any USB device with your steam link. Like headsets and maybe even the xbox one controller if I can get usbip to cooperate on windows. Basically anything that already works on your host machine through BPM should work through usbip. 

Thursday, November 12, 2015

Disabling Steam Link Auto-Standby

There was a reddit post a week or two ago that was having trouble keeping their Link on while watching youtube. I posted a fix in there but forgot to make it more public for others with the same issue to find. So if your Steam Link is automatically turning off / hibernating / standby / shutdown / suspending whatever you want to call it there is a temporary fix until Valve adds a setting for it.

The steam link is set to enter a suspended state after 15 minutes of inactivity by default, the defaults can be changed with two files though. Create two files, name one `suspend_timeout_idle.txt` and the other `suspend_timeout_interactive.txt`. These two files will contain the number of seconds before the Link will ask if you're still using the device, and the other file is the time before the Link will auto-standby without asking. I still haven't entirely figured out why there's two files yet but by default both of them are set to 900 seconds so I just keep them the same value with no issues. It seems to use the interactive one first to ask the user and then the idle one has a clamped minimum of ~60 seconds before it will auto-standby; after asking the user if they're still there.

Then in those two files (suspend_timeout_idle.txt and suspend_timeout_interactive.txt) put the number of seconds you want your Link to be on before it goes into standby. I use 7200 for 2 hours but you can use any integer value, if you want you can even use 43200 for 12 hours; doesn't matter.

Then put those two files onto a pendrive in these folders /steamlink/config/system/ So you'll have three folders, the two txt files need to go into the system folder, which is in the config folder, which is in the steamlink folder.

From there just un-plug your Link and insert the pendrive. Then re-plug in your Link and after it boots it should read the two files and stop standing by after 15 minutes. This should persist permanently unless you do a factory reset or a future update removes the support for it or the files themselves.