6. TrueOS Pico®


As a result of TrueOS using OpenRC and other changes, an update to these instructions, especially server initialization, is forthcoming.

TrueOS Pico® is an initiative to connect multiple small ARM device thin clients to a single TrueOS® system. Similar to the SysAdm project, TrueOS Pico® utilizes two primary pieces of software: Pico Server® and Pico Client®.

The goal for the TrueOS Pico® is to provide a low-cost solution for users who wish to have a central server provide resources to multiple low-cost, low-power systems. In effect, TrueOS Pico® allows one system to provide all the processing power and graphical “muscle” for as many computers the user wishes to add on the network. For example, three or four users can log into their thin clients and open utilities, browse the Internet, or even play games while one central server dynamically provides the needed resources for each of these tasks.

Pico Server® is available through pkg and in AppCafe®. Configure the server software before downloading the client software or initializing the Pico Client®.

To download the Pico Client® software, visit the TrueOS® download page. A separate computer is required to unpack and transfer the .img file to a microSD card for insertion into the thin client.

Currently, the TrueOS Pico® software is functional for TrueOS® and the Raspberry Pi 2 model B v1.1. The bulk of development efforts are being directed toward ensuring graphics and sound functionality. Future development goals include supporting a wider variety of ARM devices and potential thin clients, and building cross-platform support for the server software.

6.1. TrueOS Pico® Initialization

To create a TrueOS Pico® network, several elements are required:

  • A TrueOS® system with both an internet and local network connection to download the necessary files and be used as the Pico Server®. For this system, it is recommended to use strong hardware to provide the smoothest experience for each connected client.


For best performance, it is recommended to have wired network connections from the Pico Server® to all connected clients.

  • An ARM device to act as the thin client (as many as the user wants or the server can support). Currently, only the Raspberry Pi 2 model B v1.1 is supported, with up to five simultaneous connections on one Pico Server®.
  • A microSD card for each thin client.


Using a microSD card larger than 4 GB in size is largely unnecessary, as the server stores almost all created data.

  • Adapter or connector for microSD cards to connect to the Pico Server® (Ex. a USB to microSD card reader).

Each thin client will need:

  • HDMI monitor. Currently, 1920x1080 is the maximum supported resolution and the monitor should have integrated speakers for audio to function properly.
  • Network cable.
  • USB mouse.
  • USB keyboard.
  • Power adapter.

Once all these components are assembled, it’s time to configure the Pico Server®.

6.2. Pico Server®

Installing and configuring the Pico Server® is done via the command prompt, with superuser permissions (su or sudo <rest of command>). Open a terminal and download the Pico Server® package with sudo pkg install picoserver (also available in AppCafe®). Next, enable the Pico Server® using sysrc -f /etc/rc.conf picoserver_enable=yes. Finally, start the Pico Server® with service picoserver start.


These commands will ensure the Pico Server® automatically starts and remains active when the system is booted. Type picoserver onestart to run the server for the current session only.

Once the Pico Server® starts, a new picoserver.ini file is created on the system, found in /usr/local/etc. This .ini file holds the initialization settings for the Pico Server® and has three sections, seen in Table 6.2.1:

Table 6.2.1 Pico Server Configuration Settings
SSH Video Audio
cipher enablevgl=true enablesound=true


The Configuration Settings Table will expand as more options are developed and added to picoserver.ini.

Set the compression setting to any number from 1 to 9. The default setting is recommended as turning up the compression can introduce performance issues on the Pico Client®.

Pico uses Virtual GL (VGL) for graphics hardware acceleration. VGL works with any OpenGL supported graphics card, but Nvidia cards are generally recommended at this time.


Turning on VGL may introduce security vulnerabilities on a network with untrusted clients.

If the server does not support video acceleration or to avoid any potential security vulnerabilities on the Pico network, edit picoserver.ini and change enablevgl= to false.

Currently, audio only functions over the HDMI connection port on the Raspberry Pi, meaning audio will only work on monitors with built-in audio capabilities. Change true to false to disable all audio.

Once satisfied with the settings in picoserver.ini, new user accounts/logins may need to be created for the client systems. See the User Manager section of the SysAdm handbook for detailed instructions on creating new users on a TrueOS® system.

After any necessary accounts are created, the next step is to initialize the client.

6.3. Starting the Pico Client®

The process of initializing a Pico Client® begins on a separate TrueOS® system. On this system, navigate to the TrueOS® website’s download page and download the latest <pico>.img.xz file. This file is compressed with xz; decompress the file before burning it to a microSD card. Using the command line, navigate to the file’s location to use unxz to unpack the file:

[tmoore@Observer] ~% cd Downloads/
[tmoore@Observer] ~/Downloads% unxz TrueOS-pico-rpi2-2016-10-29.img.xz

It may take a few moments for the system to decompress the file.

Once the file is decompressed to a .img file, insert a microSD card into the system. An adapter might be necessary if the system has no microSD card slots. As the superuser, use the dd command line utility to write the .img file to the card:


Be sure the dd if= command points to the correct storage device. In the example below, the microSD card is connected to a USB adapter, identified as da0 on the system.

[tmoore@Observer] ~/Downloads% dd if=TrueOS-pico-rpi2-2016-10-29.img of=/dev/da0 bs=4m
512+0 records in
512+0 records out
2147483648 bytes transferred in 426.140554 secs (5039379 bytes/sec)

This command may take some time to process.

After the .img file is written to the microSD card; connect the Pico Client® to the Pico Server®:

  • Insert the microSD card into the thin client.
  • Attach the network cable. Be sure the client is wired into the same network as the Pico Server®.
  • Plug in the USB Mouse and Keyboard.
  • Attach the monitor’s HDMI cable.
  • Plug in the ARM device’s power cable. This should always be the last step.

For the Raspberry Pi, inserting the power cable will generally turn on the client device. The Pico Client® then searches for and connects to any Pico Server® on the network, bringing the user to the TrueOS® login screen. The Pico Client® is now ready for use.

6.4. Using the Pico Client®

There are a few differences in TrueOS® when using a Pico Client®.

If the server uses the Lumina® Desktop Environment, hovering over the Network Status Icon in the System Tray displays the client’s IP address, the server’s IP address, and the client’s unique pico_auth number, seen in Image 6.4.1. This is intended to efficiently provide relevant network information for simplified server administration.


Fig. 6.4.1 Pico Client® IP display

When logging out with the Pico Client®, several processes begin. The client clears the session, then restarts the discovery and connection processes. The server will destroy the previous user’s temp file, along with the previously assigned pico_auth #. These processes prepare the server for a new connection and user login from the same Pico Client®.

6.4.1. VGL Graphics Acceleration

VirtualGL (VGL) is the toolkit used by the TrueOS Pico® to provide 3D hardware acceleration to the Pico Client®. VGL redirects OpenGL commands and data to the GPU in the Pico Server®, then pulls back the rendered 3D images to the client. For further information about this open-source project, please refer to the VirtualGL website

VirtualGL also has an extensive user guide to help guide new users through the various features of this useful toolkit.

On a Pico Client®, test VGL functionality by opening the command line and typing /usr/local/VirtualGL/bin/vglrun glxgears. A window will popup, displaying several moving gears, as seen in Image 6.4.2. The terminal also displays the framerate of the gears, and updates periodically.


Fig. 6.4.2 VirtualGL Gears Test

6.4.2. Pulse Audio

Pulse Audio is the preferred audio solution for the Pico Client®. Pulse Audio allows a Pico Client® play audio sent from the server. The Pulse Audio user documentation provides a wealth of information on configuring Pulse Audio, including streaming audio over the network. Advanced controls for Pulse Audio are available in AppCafe® with the pavucontrol multimedia application.

6.5. Pico Server® Administration

Once the Pico Server® and thin clients are installed and ready to use, there are a number of administrative commands available, seen in Table 6.5.1. Any new commands will be added to this table:

Table 6.5.1 Pico Server® Administration Commands
Command Description
pico-server Primary Pico command. All commands begin with pico-server and a space.
-list Displays all connected clients, as either “pico_auth <#>” or the specific logins (“testuser_pico”)
-kill pico_auth <#> Immediately reboots the specified client.