Newer Chromebooks are actually pretty good at playing games and thanks to GPU acceleration and Crostini, a Debian Linux container custom-built for ChromeOS, we can easily run Linux applications on ChromeOS without any special hacks.
You’ll need to enable the Linux environment in ChromeOS Settings. You can change your Linux disk size, but 20GB is good enough for me to have a couple games and still have room for dev tools. You probably won’t be able to make it a disk much bigger and still have room for your ChromeOS environment, though.
Once it’s set up, you’ll have to set up a username in the Linux terminal.
Now that you have the Linux environment set up, download steam.deb, the Steam installer for Linux. Once downloaded, open the Files app, right-click on the .deb file, select Open with…, then Install with Linux.
It might take a few minutes to install, and then it should appear in your programs under the Linux apps group.
Troubleshooting
When I started Steam the first time, I ran into some issues with missing libraries, but was able to resolve them by installing the necessary packages from the Linux terminal.
When you’re prompted to do so, pick gdm3 or lightdm display manager. I picked lightdm because it uses less resources. Here’s an article comparing the display managers.
Side note:
During installation, I got some errors.
Errors were encountered while processing:
avahi-daemon
libnss-mdns:arm64
avahi-utils
I found this article, but it didn’t help me. So I uninstalled and reinstalled everything thinking I could select gdm3 maybe not encounter the same issues, but it didn’t prompt me, and since it worked anyway, I didn’t bother figuring it out. If you know why those errors occurred, please leave a comment.
Run the server for the first time. This will initialize its configuration.
vncserver
You should be prompted to enter a password and get some output like:
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
xauth: file /home/ubuntu/.Xauthority does not exist
New 'X' desktop is localhost:1
Creating default startup script /home/ubuntu/.vnc/xstartup
Starting applications specified in /home/ubuntu/.vnc/xstartup
Log file is /home/ubuntu/.vnc/localhost:1.log
Notice that it created a startup script ~/.vnc/xstartup. You’ll need to edit that file to get XFCE to work, but shut down the server first.
vncserver -kill :1
Back up the original ~/.vnc/xstartup.
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Create a new ~/.vnc/xstartup with the following contents:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
Make it executable.
chmod +x ~/.vnc/xstartup
The VNC server should work now, but VNC traffic is unencrypted, so if you care about people being able to snoop on what you’re typing (like passwords!) and whatever else you’re doing on your VNC connection, you should set up a SSH tunnel to encrypt your traffic.
3. Run the server securely
Run the VNC server such that it only accepts local connections.
vncserver -localhost
4. Securely connect to the server
Set up a SSH tunnel from your local machine to the remote server. This is how you’ll make the VNC connection “locally”.
On your local machine (the VNC client), run the following command, replacing <remote user> with your username on the server and <remote host> with the server’s hostname or IP address. You can also change 59001 to a different port if you want, but make the port isn’t already being used by another service and it’s above 1024.
Say you’ve got a bunch of files to organize from something like mypic20190327.jpg to 2019/03/mypic20190327.jpg. sed is a nifty tool to help you with that. You’ll need to use regex to match each part, then reference each matched part in the result, and you could use extended regex to save you some escape characters. Since this approach, touches on several features of sed, I wanted to write it down.
for filename in $(ls); do dir=$(sed -r 's/([[:digit:]]{4})([[:digit:]]{2}).*/\1\/\2/g' <<< $filename); mkdir -p $dir; mv $filename $dir; done
First, we iterate all the files in the directory.
for filename in $(ls)
Then, we calculate the directory (e.g., 2019/03) from the filename by extracting the first 4 digits ([[:digit:]]{4}) into variable 1 and the next two digits ([[:digit:]]{2}) into variable 2. Note the use of parentheses to indicate variable storage.
Note the use of the -r flag in the command which indicates the use of extended regex so we don’t have to escape our parentheses and curly braces. If you’re not using GNU sed, you might use -E or something else instead.
sed -r
Note the .* at the end of the expression so our result replaces the entire line and not just the year and month parts.
([[:digit:]]{4})([[:digit:]]{2}).*
We refer to our stored variables using \1 and \2 in our result string to make a directory path year/month.
\1\/\2
Note the here-string syntax used to indicate sed should use the literal string as input instead of interpreting it as the name of the file from which to read and match data.
<<< $filename
Now that we have our directory name, we make it with mkdir using the -p flag to make any intermediary directories. And finally, we do the move.
By editing that file, you can bring it down further.
echo "1" | sudo tee /sys/class/backlight/intel_backlight/brightness
For me, the value 0 works fine as well, but it doesn’t appear to be any different than 1, and I get this weird feeling that some XFCE is going decide to black out the screen on 0 someday so I just play it safe with 1.
The default prompts are probably sufficient, but going for more security (like 4096-bit security) probably won’t hurt. After you get through creating the key, it’ll automatically be imported into your trusted key list.
Next, get your GPG key fingerprint.
gpg --fingerprint YOUR_GPG_KEY_NAME
Next, go into your Git project directory and configure it with your name, email, and GPG signing key.
Last Black Friday, Wal-Mart had a Samsung Chromebook 3 for $99. It’s powered by a dual-core Intel Celeron with 4GB RAM, 16GB SSD, Bluetooth, 802.11n, SD card slot, two USB ports, webcam, and 10+ hours of battery runtime. I thought it would only be good for doing browser-based activities in CoderDojo, but it’s grown on me as a tablet replacement. Now, I’m hoping to even replace my notebook.
Following White’s advice, I made a Google account just for the device, but ultimately decided to go back to using my personal account because I wanted access to my Google Play purchases. But like White said, I can always Powerwash and use the device account when I travel to potentially hostile environments.
I changed my authentication to be through a hardware key (and Google Authenticator as a backup) which turns out to be very easy to use.
I’ve more or less gone with White’s guide in my build. In addition to his goals, I added a few:
Docker: I’m looking into this, but it looks like I might need a 32-bit x86 version to run under Termux.
ADB: I’m not even close to getting this working yet.
Some things to note:
It takes some getting used to Termux’s long-press on touchpad to copy/paste. There’s no CTRL+C/V options AFAIK.
If you store data in SD card, remember that it’s not encrypted by default.
This error always gets me when I change my Cygwin home directory to my Windows home directory and I’m using Cygwin SSH with StrictModes enabled. Then, I have to go digging around the web for the solution. So the error looks like this:
$ ssh -v YOUR_REMOTE_HOST
### some stuff happening ###
debug1: Remote: Ignored authorized keys: bad ownership or modes for directory /cygdrive/c/Users/YOUR_USERNAME
For some reason, Windows makes user directories group-readable and StrictModes doesn’t like that. So you’ll have to do some permission editing: