File | Date | Author | Commit |
---|---|---|---|
tcfiles | 2025-04-29 |
![]() |
[3dd6ba] Pulseaudio and mic fixes |
.gitignore | 2025-04-29 |
![]() |
[22b883] Brightness and mic control |
Dockerfile | 2025-04-29 |
![]() |
[3dd6ba] Pulseaudio and mic fixes |
Readme.md | 2025-04-29 |
![]() |
[22b883] Brightness and mic control |
UFTC Thin Client Troubleshooting.docx | 2025-04-29 |
![]() |
[3dd6ba] Pulseaudio and mic fixes |
Version | 2025-04-29 |
![]() |
[22b883] Brightness and mic control |
build.sh | 2025-04-25 |
![]() |
[355d98] Better build script |
d2vm | 2025-04-25 |
![]() |
[b57fca] Make executables executable by default |
desktop | 2025-04-25 |
![]() |
[a2c724] ip command |
login.png | 2025-04-26 |
![]() |
[3aeeb3] Update readme |
UFTC was born out of my passion for IT, I have always wanted the ability to have thin clients in my home lab yet nothing online I could use for free was what I wanted.
Many organizations I supported across IT departments always wanted the same thing, a lightweight locked down thinclient with a simple login screen.
This project is geared towards that use case, repurpose machines into thin clients or save money by using your own consistent thinclient image with mini PC's.
Super simple to setup, and easy for the end user.
Image building requires docker and can be done inside of WSL2 if desired.
./build.sh
grub as the bootloader unlocks a few things most importantly uefi support, you also get a seperate fat32 boot partition where you can place the config files when provisioning.
Boot partition is a sizable 4GB to reduce the risk of running out of space for the kernels, with a total size of under 16GB this should fit on a 16GB USB stick if you wish to use a USB Stick for customization and capture.
Important: The modern kernel could not be included in the build process, boot your generated image in a VM once so it can finalize the build. Release images have this step completed.
This image is a direct drive image without an installer, you can directly flash it to the target media.
For flashing on Windows Rufus is compatible and directly compatible with the .vhd format.
On Linux you can use qemu-img convert /location/of.vhd /dev/targetdevice
Because we don't have a mandatory installer you have every possibility available for deployment that you'd like.
The recommended method is using RescueZilla on a Ventoy USB stick, this will allow you to deploy the provided VHD image as well as capture your own. If you prefer a more traditional install an ISO is available.
WiFi can be enabled by placing a suitable wpa_supplicant.conf on the boot partition.
Here is a template (Don't forget to change the country, I put china as the example due to the broadest range):
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN
network={
ssid="SSID GOES HERE"
psk="Password goes here"
}
If the thinclient is not preconfigured on the boot partition it will automatically boot its configuration screen.
Fill in the fields you require for your deployment, if your server is not connected to a domain leave this blank.
The parameters field are for additional xfreerdp parameters.
The helpdesk field will be used in the middle of error message sentences, for example "Please contact HELPDESK if this is not resolved after 5 minutes."
Just like the WiFi the settings for the thinclient software can also be preconfigured by placing a tcconfig file in the boot partition.
The template for this file is as follows (pay attention to the line endings, they need to be linux compatible):
server=
domain=
param=
adminpass=
helpdesk=
volume=
microphone=
brightness=
config_url=
If a config_url is defined the thinclient will automatically download its config file every time the login screen is shown.
As a safety measure the config is only written on a succesful download and the previous working URL is backed up to a seperate file (If your new location is succesful the old URL is overwritten).
Should the config become corrupt the backuped up config URL can be used to recover functionality, there are cases where the incorrect URL can become permanent such as migrating your production thinclients to the configuration of your development environment as this sets a working config_url . To help minimize this risk its recommended not to specify a config_url in configurations that are not meant for production (Do not leave it empty as this will disable remote setup, remove the line entirely).
Because of this and the inherent dangers of remote configuration ensure the config file webserver is well secured and the configuration files are well tested before mass deployment.
Even though this functionality was exploit tested it is a possible point of failure if a hacker finds a novel bash exploit or overwrites the RDP server with a malicious one.
tc_hostname in the URL is automatically replaced with the hostname of the thinclient to enable per client configuration.
You implement this functionality strictly on your own risk. If left blank this functionality is fully disabled.
Some functionality such as connecting to a connection broker collection can only be achieved trough .rdp files just like mstsc on Windows.
To make this possible you can choose to use a download link for the RDP file as the server name.
There is a basic Citrix mode on board that can be activated by putting citrix as the server name. The URL of the Citrix Storefront can be preconfigured by putting it in the parameters, each time this setting changes to a new URL the Citrix profile is wiped.
In the release the root account is disabled with two exceptions that do not require a password:
auto-maintenance (Own risk), this tool can be used to manually update the system or can be used to enable automatic updates.
set-hostname , this tool changes the hostname of the thinclient. If the dynamic_hostname file is present in the user account hostnames will be set according to the macaddress of the wired adapter.
(Likewise the thinclient account has no default password)
When self building you can pass a -p parameter to enable the root password.
config : Re-open the config dialogue
terminal: Open the terminal
ping (without your admin password in front): Ping the RDP server with a full traceroute, users can change this to any required destination if needed.
ip (without your admin password in front): Shows the devices network information