Have you ever been able to set up Linux exactly how you wanted it? No? Don't worry, few have. I am happy to say, though, that with much begging and with many tears I have been able to set up woz (that's what I'm calling the machine, formerly Gandalf Elder) pretty much how I want it.
Woz is running a reasonably old version of Ubuntu. I originally tried to install the current version of Ubuntu (15.04) on Woz but I was ultimately unsuccessful. For some reason, woz absolutely refused to let it install. I ended up going with Ubuntu 12.04 LTS for a variety of reasons. The main reason is because Dr. Marmorstein found an install disk in the Hardy House and it worked. I ultimately decided to stick with 12.04 for two reasons. One: I had a pretty good idea of what I needed to change in 12.04 in order to make woz do what I wanted. Two: I’m pretty sure Canonical changed a lot of things in the window manager post 14.04 which would have made it very difficult to make woz cooperate.
Continuing that thought, Ubuntu 12.04 LTS uses a display manager called lightdm which is fairly amenable to being modified. Ubuntu usually uses “unity” as its desktop and unity is essentially just a program that runs at login. Do you see where I’m going with this? Because unity is just a program (for the most part), all I need to do in order to have woz automatically start GCompris at login is create a new .desktop file.
If you go to
you will find a variety of .desktop files. These files tell lightdm what to do when a user logs in. I just copied the ubuntu.desktop file and modified it to run GCompris instead of the normal session.
If you look at the line
Exec=gcompris --disable-quit --disable-config --disable-level
you will see how it is executing GCompris. “Exec=“ specifies that it’s an executable that needs to run. “gcompris” is the name of the app. “--disable-quit” disables the exit button, “--disable-config” disables the settings button, and “--disable-level” disables levels. It is worth noting that “--disable-quit” is no longer is use because it is now necessary for the user to be able to quit GCompris and get back to the games menu.
The other important line is
which is how lightdm will know which file to use.
Lightdm (as you already know) is the window manager that Ubuntu replaced Gnome with. When I originally started researching how to do this project, Gnome was the window manager that all of the tutorials were using. Gnome has a lot of features which would have made the configuration easier, but, alas, Ubuntu no longer uses Gnome so I had to figure out how to configure lightdm. In the end, lightdm wasn’t very difficult to setup once I figured out all of the different settings. It did require a bit of creativity in setup, though, because getting it to behave in the same way as Gnome requires a number of workarounds.
If you go to
you will see a number of files which pertain to the configuration of lightdm.
The first file we’re going to look at is lightdm.conf
Unlike in the xsessions configuration file, most of the settings in the lightdm.conf file are important.
The first line we’re going to look at is
which tells lightdm to use the gcompris.desktop file which we saw earlier in the xsessions configuration file.
tells lightdm to initially bypass the login screen and automatically login to the user account ‘gcompris.’
Unfortunately, this only applies when lightdm initially starts which means logging out of the account will return you to the login screen. This behaviour is different from Gnome which allowed you to automatically log back into a user account upon logout.
allows us to specify a script to run upon user session logout. In this case, I’ve told it to run the ‘restart’ file in the same folder.
The restart file’s purpose is fairly self explanatory. Like I mentioned earlier, lightdm will automatically login to a particular user account upon startup, but will return to the login page upon logout. The restart file simply restarts lightdm upon user logout which causes the gcompris account to automatically log back in because lightdm has restarted. This prevents users from ever seeing the login screen which is very important because it prevents them from potentially accessing unauthorized parts of the system.
Now you’re probably wondering how administrators are actually supposed to access the computer, considering there’s no way to log in because it just logs back into the gcompris account which doesn’t have a normal interface. The best place to start is probably with the WiFi. One of the first things you'll notice when you get close to the arcade machine is that it has WiFi. Much to everyone's dismay, though, the WiFi is extremely secure and isn't connected to the internet (yet).
I had originally considered trying to either set up the computer so that you could connect a serial terminal to it, and then I considered giving it a wireless card so that it could connect to a wireless network, but I ultimately decided that the best choice is to simply install a wireless router in the cabinet. The reason why this is particularly effective is because it does not even require you to be at the arcade machine to make changes to it, you simply need to connect to the wireless network and SSH into woz.
Now for the technical stuff. I am using a fairly common router in the arcade machine. You may be wondering “What’s it called?”, and I have the answer:
Pretty straightforward, huh? I have the router configured to use WPA2-PSK with a very strong password so don’t bother hacking into it because you won’t have much luck. The strength of the key exceeds current day rainbow tables (as far as I know). I gave woz a static IP address in the router so that it is easier to connect without having to figure out it’s IP address every time. I’m not sure whether or not the arcade machine will be connected to the internet when it reaches it’s final destination, but as it stands, there are facilities in place which will expedite getting it setup for remote administration should that option be available.
Once you’re connected to the network, you will need to SSH into woz with port forwarding.
The IP address for woz is 192.168.1.2 and you can login to either the gcompris account, or the admin account which have different permissions as well as passwords. Originally, I never intended for anyone to actually be logging into that account for anything other than playing games, but it became necessary because of the difficulty of administering gcompris from a different account. As a result, the gcompris account has a very weak password but I haven’t yet decided whether I should change it or not because there still isn’t much that can be done with that account, especially without having network access, but at the same time, if this does get connected to the internet, I don’t want the password to be easily brute-forced, so depending on what the future of it’s connectivity is, I may or may not decide to change it to something more secure.
Port forwarding isn’t necessary if you intend to do things which only require the command line, but for other tasks, it may be necessary to use VNC. In order to forward that port, append
to the end of the ssh command. The ‘-L’ tells it to forward a port, ‘5900’ tells it which port on woz should be forwarded, ‘localhost’ tells it where the port should be forwarded (localhost being the machine you're using to connect), and ‘8900’ tells it which port on your computer to forward it to.
Once you have logged in, to start the VNC server, type
at the command line.
Some of the settings which were set in the lightdm configuration file can also be seen in the ‘User Accounts’ pane of ‘Settings.’
As you can see, the switch for automatic login is enabled.
Lastly, when you have logged in and connected with VNC, you can launch the GCompris administration panel.
I believe this is everything. Feel free to leave me a comment below if you have any question, comments, or concerns.
This took about 18 hours in total. So 18 + 3 hours from previous tasks brings my total up to 21 hours.