An experimental QEMU image is available that includes:
- Phosh: the phone graphical shell
- Common apps: Geary, Epiphany, Contacts, Calls, etc.
- Phone/network services: NetworkManager, ModemManager, etc.
First, obtain a disk image for your workstation. The most recent qcow2 image for x86_64 should be suitable for most users. If that is not available, follow these steps:
Go to the Image Build page on the CI server.
Find the most recent successful (green colored) qemu-x86_64 build in the Build History column on the left-hand side of the page (use the “find” field to filter the list in the column with “x86_64” as keyword for instance to match your target hardware architecture). Clicking on the link for that build will take you to a page containing a suitable
(The qcow2 image can also be built locally using Librem5 image building scripts.)
You need software to run the image. You can use any virtualization application that will create a VM from a qcow2 file to run this image.
On PureOS, gnome-boxes is already installed and can be used right away. Create a new Box from archive selecting qemu-x86_64.qcow2
On PureOS, you would need to install virt-manager:
$ sudo apt install virt-manager
Create a new virtual machine from your archive by selecting qemu-x86_64.qcow2
Using QEMU on the Command Line¶
You can also run the qcow2 image from the command line:
$ sudo qemu-system-x86_64 -boot menu=on -drive file=qemu-x86_64.qcow2,format=qcow2 -vga virtio -display gtk -m 2G -enable-kvm
It may be necessary to pass the
-smp option (for example with
-smp 6) to improve performance. The
-display option accepts different display types as its parameter – experimenting with these may prove useful.
If you would like to allow ssh connections from the host into the guest system, you may add
-device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22 to the
qemu-system-x86_64 command above. Then, from another terminal window in the host, you can log in with this command:
$ ssh -p 5555 purism@localhost
See the QEMU documentation for more information.
First, obtain a disk image for your workstation. The most recent img.xz image for x86_64 should be suitable for most users. If that is not available, follow these steps:
- Go to the Image Build page on the CI server.
- Find the most recent successful (green colored) qemu-x86_64 build in the
Build History column on the left-hand side of the
page. Clicking on the link for that build will take you to a page containing
Download the image to a suitable place:
Download the build artifact by right-clicking on the file called
qemu-x86_64.img.xzand choosing “Save As”.
Choose a folder on your computer with 4GB of free space.
After the download is complete, extract the file with 7zip or other untar program.
Open an instance of PowerShell and navigate to the extracted file’s folder.
The following command can be executed in PowerShell after modifying the path to the qemu executable and the path to the downloaded qemu-x86-64.img file.:
C:\Program Files\qemu\qemu-system-x86_64.exe -drive file=c:\downloads\qemu-x86_64.img,index=0,media=disk,format=raw -vga virtio -display sdl,gl=off -m 2G -L Bios -boot menu=on -rtc base=localtime,clock=host -parallel none -serial none -name PureOS -no-reboot
Note: You may also download and modify the following PowerShell script for your environment. The file can executed on the command line, or by right-clicking launch-librem5.ps1 file from file explorer. The script is fully commented to explain the command line variables that are used.
Expanding the Filesystem¶
The qcow2 image is built such that, by running a simple command from within the VM environment, you can resize the root filesystem to fill the partitioned space.
In this example, the filesystem to be resized is /dev/vda2 but it will depend on the drives that are available in the VM image – it could be /dev/sda2 or something similar.
Before the rootfs is resized, running
df -h from within the VM environment will show you that
/dev/vda2 has a size of 3.1G. To grow the partition, resize the
/dev/vda2 partition and then check
df -h again to see that it is now 31G:
purism@pureos:~$ sudo resize2fs /dev/vda2 resize2fs 1.44.4 (18-Aug-2018) Filesystem at /dev/vda2 is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 4 The filesystem on /dev/vda2 is now 8172342 (4k) blocks long. purism@pureos:~$ df -h / Filesystem Size Used Avail Use% Mounted on /dev/vda2 31G 2.2G 28G 8% /
Now your additional space on
/dev/vda2 is immediately ready for use without any need to reboot.
Using workstation devices inside the VM¶
You might want to use your workstation’s devices to test hardware-specific features within the VM, such as:
- testing the camera API or a camera app using your webcam
- testing cellular network-related features (like calls/SMS/data) using your laptop’s modem
In such case, you need to redirect the devices of the host machine (i.e. your workstation) so that the guest VM can use them.
As an example, let’s take a USB webcam. Once you have redirection properly configured, you can test it out by installing and running
cheese within the VM.
Virtual Machine Manager¶
virt-managerand open the entry for your librem5 VM
Click the “i” icon to show the virtual hardware details
Click ‘Add Hardware’ (bottom-left corner)
Select ‘USB Host Device’
From the list of available Host Devices available, select the webcam and click ‘Finish’
You should now see the newly added device listed as ‘USB <vendor ID>:<product ID>’
If you’re running the VM manually via the command line instead, you will need to pass the following additional arguments to qemu:
- An emulated host controller of your choice (e.g.
- The product ID and vendor ID of the USB device you want to redirect
For example: a Logitech USB HD Webcam C910 has vendor ID 046d and product ID 0821.
You would need to pass these as values to
productid respectively (with 0x prepended):
-device qemu-xhci,id=xhci -device usb-host,bus=xhci.0,vendorid=0x046d,productid=0x0821
To find the the information needed to redirect your device, run
lsusb. It will print a list of USB devices present, in the following format:
Bus <USB bus> Device <address>: ID <vendor ID>:<product ID> <human-readable device name>
Then you can get the vendor ID and product ID from the line corresponding to your device.
Using the Image¶
The emulator should boot up to a lock screen. Swipe up to show the passcode entry screen, then log in using the passcode 123456.
You can now start exploring the phone software.