Ask HN: Turn Key Ubuntu Kiosk Mode
Since I want the product to have a console feel, I’d like to boot directly into some sort of kiosk or app launcher, that would only allow the user to select from one of these preset binaries.
At the moment, I care less about actual security of the system (user breaking out of the sandbox), and more about ease of use and UX.
I’ve searched the web for an easy solution to this, but everything I’ve found seems like a lot of configuration and set up. I’ve also looked briefly into some of the game emulator Linux builds, but modifying these feels like overkill. I know some configuration will be necessary, but was hoping the community may be able to help me save some cycles with a few suggested applications or methods to achieve this!
I should also mention I’m open to both paid and free software options.
Any ideas?
10 comments
[ 5.1 ms ] story [ 26.7 ms ] thread#!/bin/bash
while true; do echo "Please choose a binary to run:" echo "1) Binary 1" echo "2) Binary 2" echo "3) Binary 3" echo "4) Binary 4" echo "5) Exit"
done=======
To use this script:
Copy the script into a file on your device. You might name it launcher.sh, for example.
Make the script executable by running chmod +x launcher.sh.
Set this script as the login shell for your user. To do this, you'll need to add the full path to the script to /etc/shells, and then use chsh -s /full/path/to/launcher.sh username to change the login shell for username.
Configure your system to automatically log in as username. The method for doing this depends on which display manager you're using. If you're using LightDM, for example, you can do this by editing /etc/lightdm/lightdm.conf.
For instance, use Electron as your app launcher.
Perfect it later if that's not your thing.
In terms of not having a full desktop loaded, I don't know. My guess is that if you're running the libraries to launch the graphics system in the first place, it should work.
However, luckily, I've been asking ChatGPT so far, haha, so I'll just ask it again.
One second.
Here is a step-by-step guide:
*Step 1: Create a systemd service*
Create a systemd service file at `/etc/systemd/system/myapp.service` with the following contents:
```ini [Unit] Description=Start My App
[Service] ExecStart=/usr/bin/systemd-nspawn -D /path/to/container /root/launcher.sh Restart=always User=youruser Group=youruser
[Install] WantedBy=multi-user.target ```
Replace `/path/to/container` with the path to your container, and `youruser` with your username.
Enable the service to run at boot with:
```bash sudo systemctl enable myapp.service ```
*Step 2: Configure your display manager*
This step depends on which display manager you're using. If you're using LightDM, for example, you would create a new X session by creating a `.desktop` file at `/usr/share/xsessions/myapp.desktop` with the following contents:
```ini [Desktop Entry] Name=My App Exec=/usr/bin/systemctl start myapp.service Type=Application ```
You would then configure LightDM to automatically log in and start this session. Edit `/etc/lightdm/lightdm.conf` to include these lines:
```ini [Seat:*] autologin-user=youruser autologin-session=myapp ```
Replace `youruser` with your username.
This setup should start your systemd-nspawn container and display your Electron app or Unity game fullscreen at boot.
As for your question about running a Unity game without a full desktop environment: yes, it should be possible. Both Electron and Unity should be able to create their own windows without relying on a desktop environment. The one caveat is that there may be certain features that rely on the desktop environment (such as system notifications), which would not be available.
Note that this setup does not prevent the user from switching to other TTYs or sessions. If you want to restrict the user to your app, you'll need a more comprehensive "kiosk mode" setup that locks down the system at a lower level.