Make it easier to debug the Greeter
Originally created by @segfault on #17084 (Redmine)
While working on #16912 (closed) and #15635 (closed), I found that the instructions in greeter.git/HACKING for testing the Greeter in a running Tails don’t work, because restarting gdm.service doesn’t restart the Greeter.
I found another way to test changes to the Greeter without rebuilding Tails:
-
Boot Tails (in a VM) with
break=bottom
androotpw=<password>
kernel command-line options. -
In the initramfs, edit
/root/usr/share/applications/tails-greeter.desktop
, replace theExec=
line withExec=gnome-terminal -- /bin/bash
. Exit the initramfs to continue the boot. -
In the gnome-terminal, log in as root with the root password set above:
Debian-gdm@amnesia:~$ su
- If you want to copy code via the clipboard from the host system, open the file you want to modify via gedit:
# Changing the DCONF_PROFILE is required to be able to save the file via gedit
DCONF_PROFILE=user
gedit /usr/lib/python3/dist-packages/tailsgreeter/gdmclient.py
-
Remove all
self.__greeter
andself.__user_verifier
lines from the__init__
function in/usr/lib/python3/dist-packages/tailsgreeter/gdmclient.py
. These commands fail if run from outside a GDM session, i.e. from the gnome-terminal shell. -
Exit the root shell and execute the greeter:
root@amnesia:/var/lib/gdm3# exit
Debian-gdm@amnesia:~$ /usr/local/lib/tails-greeter
This starts a functional greeter, except that it won’t start Tails, because of the lines deleted in step 5.
I wanted to document this somewhere, so that I can find it when I have to debug the greeter again.
Also, we could make step 5 easier if we check whether an environment variable like “TAILS_TEST_GREETER” is set, and don’t execute the failing commands in gdmclient.py in that case - similar to the GDM_TEST_GREETER variable supported in gnome-shell, see https://bugzilla.gnome.org/show_bug.cgi?id=683725.