Game Console Project
For this project option, you will create a custom game console using a computer system or single board computer (such as a Raspberry Pi). You will configure this system with a ten foot user interface and a game controller so that you can play games on your TV while sitting on your couch.
Required Technology
To be able to complete this project successfully, you will need:
- Some kind of computer system that you can wipe and repurpose for this project. A desktop, laptop, or custom-built system will work for this purpose. A Raspberry Pi or other single board computer will also work.
- A TV capable of displaying video from the computer. Usually, this means using HDMI. Note that older HDMI specs were limited to 30 Hz at 4K resolution, so you might need to run some 4K TVs at 1080p to get a higher refresh rate depending on the HDMI outputs on both the TV and the computer.
- A game controller. Most, but not all, wired controllers will work in Linux. For wireless controllers, PlayStation controllers tend to work quite well (the PS5 DualSense controller also doubles as a touchpad for the desktop environment). The Nintendo Wii U Pro controller is known to work, and the Switch Pro Controller and Joy-Cons should work. Xbox One S and Series X|S controllers are rumored to be workable as well. Note that you need special hardware (a USB receiver) if you use an Xbox 360 controller, since these devices use a proprietary wireless signal instead of Bluetooth.
- A way to record and upload a video presentation (using your phone, or in later milestones, screencasting software).
Recommended software:
- For x86_64 computers, Artix Linux is recommended for this project, but you may use any non-systemd distribution.
- For 32-bit x86 computers (ancient ones), this project “should” work if you use Slackware Linux.
- For Raspberry Pi devices and other single board computers, try Alpine Linux. For esoteric single board computers, you may use the distribution recommended by the board vendor, even if it contains systemd.
Please note that this project option is NOT recommended under the following circumstances:
- You only have one computer. The Application Alternatives Project or Web Stack Project would be more appropriate in this case.
- The system you have available for this project is an Apple machine. While it is possible to switch Apple systems over to Linux, there are always extra steps involved. Apple doesn’t quite follow industry-standard specifications with their hardware.
- The system you have available for this project is a Chromebook. Like Apple, Google (and partners) hack together Chromebook systems as purpose-built appliances. Some of them can be switched over to a regular Linux distribution easily, while others are a nightmare to get working. It’s hard to know in advance which situation you will encounter.
An older laptop or desktop computer is sufficient for running Linux, and switching it over to Linux is a great way to reuse old hardware. However, if the system is positively ancient and can only run 32-bit software, then you will likely need to choose Slackware as your distribution for this project.
Background
If you buy a modern game console, it is full of tracking and advertising. The PS5 collects and reports user data to Sony. Nintendo Switch users are only marginally better off in comparison, and trying to take back some control may lead to bans. The Xbox X|S is probably the worst of the three major consoles, which isn’t at all surprising given the state of Windows 11.
Fortunately, it’s still possible to have a game console and maintain some degree of privacy at the same time by building one. Several purpose-built approaches are possible, including the use of a single board computer like a Raspberry Pi or specifying and building a dedicated computer (often in a Mini-ITX or similar form factor with quiet fans). However, if you happen to have an old desktop or laptop computer lying around, this is one good way to repurpose it and give it some extra useful life instead of sending it to a landfill.
Obviously, the choice of hardware will limit what kinds of games can be played: a single board computer or really old desktop or laptop is probably good for 2D casual games and running emulators for consoles from the 1990s and earlier. Some open source games will also run on older or less powerful hardware. At the opposite extreme, a purpose-built PC with a modern dedicated GPU can handle even the most demanding commercial titles from Steam. As an added bonus, the Linux environment configured on most of these systems can be used for other purposes, like surfing the Internet from your couch or watching streaming video.
Not all Linux distributions are created equal, and there are fundamental tradeoffs between distributions and software stacks. One worrisome trend from the commercialization of Linux in recent years has been the emergence of tightly coupled, minimally cohesive software applications and services that cram too many unrelated tasks into a single system process. The poster child for this type of poor system and software engineering is systemd, which is a replacement for init(1) that also does a bunch of completely unrelated tasks.
The fundamental problem with having a tightly coupled software application running in place of init, is that this software occupies a privileged position in the system. It runs as PID 1, which is the first process created directly by the kernel at boot time. As such, this process has root execution privileges and is the direct or indirect ancestor of all other processes on the system. Any bugs in this process can bring down the entire system. Any vulnerabilities in this process can easily compromise the entire system. And systemd has a huge attack surface due to the large collection of unrelated functionality that has been integrated into it. For more detail, see the No systemd website.
Should you choose this project option, your first task will be to identify and select a non-systemd Linux distribution to install on your computer. There are some options linked from the No systemd site in the previous paragraph, but a more comprehensive list may be found at Without Systemd. That said, if the machine you’re using has an x86_64 architecture, I recommend Artix Linux, which is Arch Linux with a choice of init systems other than systemd. Since Valve is shipping Arch Linux (with systemd) on the Steam Deck, it is a pretty good bet that most Steam games should run on Artix (as long as your hardware is powerful enough, of course). If you have a positively ancient computer with a 32-bit x86 processor, Slackware Linux should support it as long as it isn’t from the 1980s or perhaps the early 90s. If you happen to own a Raspberry Pi, then Alpine Linux is likely to work.
In addition to a computer, you will also need a TV and a game controller (see above). On my own system, I find that a wireless keyboard with a built-in touchpad is also helpful to have, since it makes surfing the Internet and performing system administration tasks a bit easier.
You will need to configure a “10 foot user interface” to work with the TV. I have found that KDE Plasma works well if you increase the display scale and use the “application dashboard” launcher. Really any desktop environment will work if you can increase display scaling. Steam has a “big picture” mode for this purpose, and RetroArch uses a 10-foot interface natively. There is also Kodi Media Center, which can be adapted to make an all-in-one console and media box, among other choices.
Project Requirements
A successful implementation of this project:
- Boots directly on a laptop, desktop, or single board computer. A virtual machine is NOT suitable for this purpose, as it will not have the required gaming performance.
- Has a working 10-foot user interface.
- Has a working firewall that blocks access to all incoming ports, except for related and established traffic and for the ICMP packets required for IPv6.
- Works with a game controller for input to the video games.
- Has a working Firefox browser that can play DRM-encrypted videos from streaming services, has uBlock origin installed, and is configured for privacy.
- Can play video games. Open source games are fine for satisfying this requirement, as are console emulators and retro arcade games. Of course, modern 3D titles are also fine if your hardware is powerful enough.
- Uses a non-systemd Linux distribution (with the sole exception of esoteric single board computers that can’t easily run anything other than a specific distribution provided or recommended by the manufacturer).
- Has a software stack that is built from the ground up. In other words, off-the-shelf console distributions like RetroPie and SteamOS are NOT ALLOWED. Similarly, you may NOT use off-the-shelf media center distributions like LibreELEC or OSMC. As a rule of thumb, if you aren’t doing the system integration (note the title of this course) yourself, it probably isn’t OK.
- Is personalized and customized with colors, themes, artwork, wallpaper, or other content of your choosing.
Completion of this project demonstrates the ability to integrate system components to build a video game console.
Specific Rules for This Project
- A non-systemd Linux distribution must be used. This requirement is in place for several reasons. First, see the background information about the attack surface of systemd, above. Second, prohibiting systemd eliminates “beginner” distributions like Ubuntu. Finally, on a related note to the previous point, experience with a distribution other than Ubuntu is important to be taken seriously in an interview for a Linux-related position.
- It is NOT a requirement that the resulting console be able to run AAA titles with heavy graphics demands. A console based on a weak system that can only play more basic games is perfectly acceptable for this project.
- Since consoles typically use game controllers, a controller is required for this project. While an advanced controller such as a PS5 DualSense will provide a better experience, a cheap wired controller from a big box store or online is also perfectly acceptable (as long as it works with Linux).
Academic Integrity Rules
- Generally speaking, this project is to be completed INDIVIDUALLY. You may use any Internet source for research purposes, and you may share and receive information through the course forum activity (in fact, sharing information through the forum is a separate requirement of this course). However, you are to implement your own solution to this project and produce your own videos.
- You MAY work with another student (or multiple other students) if each of you completes a SEPARATE project option in this course.
- If you’re taking this course with your best friend, roommate, family member, or other close associate, it is advisable to choose separate projects to avoid any appearance of questionable activity. As a bonus, you both will learn more.
Milestones
Milestone 1
For Milestone 1, prepare a video presentation that covers the following items:
- Identify and show the computer system or single board computer that you will be using for this project.
- State what kind of CPU is in the computer, how much RAM it has, and how big the storage device (SSD or hard drive) is.
- Identify the non-systemd Linux distribution that you will use for the project.
- Identify the exact type of game controller that you will use for the project.
Before submitting, review the Grading Rubric for Milestone 1.
Milestone 2
For Milestone 2, prepare a video presentation that covers the following items:
- Show that you have successfully installed the Linux distribution onto the computer.
- Demonstrate that you have a working 10-foot user interface that can be viewed on a TV from a couch some distance away.
- Demonstrate that you have correctly set up iptables and ip6tables by running the following commands as root and showing the output:
iptables -S
ip6tables -S
Before submitting, review the Grading Rubric for Milestone 2.
Milestone 3
For Milestone 3, prepare a video presentation that covers the following items:
- Using your installed system, demonstrate that you can run a video game.
- Demonstrate that Firefox is working and has uBlock Origin installed.
- Go through the Firefox settings, and show that:
- Opening previous tabs/windows is disabled.
- Extension and feature recommendations are turned off.
- Everything except (optionally) Web search is turned off on the home screen.
- A search engine other than Google or Bing (MSN/Microsoft/whatever they’re calling it this week) is configured.
- Search suggestions are off.
- Cookies are deleted on exit.
- History is cleared on exit.
- The “shortcuts” feature is disabled.
- Telemetry is disabled.
- HTTPS-only mode is enabled.
- Use about:config to show that the disk cache and browser reset prompt have both been disabled.
Before submitting, review the Grading Rubric for Milestone 3.
Milestone 4
For Milestone 4, prepare a video presentation that covers the following items:
- Demonstrate the capabilities of your console over a range of video games.
- Explain what your console can and cannot do based on your hardware limitations and software choices.
- Show that you have personalized your console operating environment (colors, backgrounds, etc.).
Before submitting, review the Grading Rubric for Milestone 4.
Tips and Resources
- I have an extensive introduction to iptables that explains how to configure the firewall.
- See Configuring Mozilla Firefox from my CSCI 435 course for instructions to make Firefox more private.
- Depending on the age of your computer, you might need to boot the system using UEFI. In this case, disable Secure Boot in the system firmware (aka BIOS Setup) to get the Linux installer working. It is technically possible to configure Secure Boot to work with Linux, but the exact method varies by system manufacturer, and doing so is not a requirement for this project.
- Be sure that you’ve actually installed the system and aren’t just running in a live environment. Many distributions will give you a working desktop environment when booting from the USB stick, but any changes you make inside that environment will be lost whenever the computer is shut down or rebooted.
- The amount of work required to do the initial system setup depends on the distribution you choose. There is a general tradeoff here: the more work you have to do to install the system, the easier it usually is to customize the system to your exact liking. Linux distributions that install easily may not be as customizable, and you might find it more difficult to install specific software applications that you desire.
- To locate open source games, try the Games category on Flathub (for use with Flatpak) or the list at Wikipedia.
- Popular game launchers on Linux include RetroArch, Lutris, and Steam, but there are others.
- Commercial games can be purchased (or, for free to play games, downloaded) from Steam or GOG.com.
- A number of Windows games that do not have Linux ports are playable through various versions of Wine. Lutris, PlayOnLinux, Bottles, and through Steam using its Proton layer are tools that can help configure Wine.
- The Internet Archive Software Collection has a library of vintage and historical games that might be interesting “for educational purposes only.”
Laptop Touchpad Issues
If you’re using a laptop, and you find that touchpad scrolling or tapping stops working randomly, create (as root) a file at /etc/modprobe.d/psmouse.conf with the following contents:
blacklist psmouse
Then reboot and check touchpad operation.