In the previous post, I explained how I was using a graphics window to display the current clock settings, and I showed how it was possible to generate a nice-looking output using a package called graphics.py by John Zelle. I use xrdp (remote desktop protocol) to connect to the Pi from my PC, although I’m aware that there are other ways like using a terminal emulator. However, I like to be able to use a familiar window-type interface with the file management, editing and web-browsing that it offers.
It turns out that this raises several issues. Firstly, the graphical LXDE desktop on the Pi is only initiated after logon, not at bootup. Therefore, you can’t write to it in during boot-up. If you try, you get various weird errors like: Invalid MIT-MAGIC-COOKIE-1. This is something to do with incorrect setting of the .Xauthority environment variable, which is apparently set for each user, and during bootup there isn’t a user, except root. I have seen various suggestions for fixing this. But if you get past that hurdle, you will then be told that it can’t find display :10 or something similar. Since LXDE hasn’t yet been started, that is to be expected.
Now, you can get programs to open automatically when the desktop loads by editing the file using
sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart
You simply add the file that you want to run, as follows:
@lxpanel --profile LXDE-pi @pcmanfm --desktop --profile LXDE-pi @xscreensaver -no-splash @point-rpi @python3 /home/pi/Downloads/moon-clock-with-reporter18-11-09.py
In my case, I’ve added the last line starting @python3, which executes the moon–clock software. Now experienced users will be aware that because the moonclock software uses the GPIO pins for both input and output, I should run it as super-user, using
sudo python3, otherwise I can’t access the GPIO. But, if I run it as superuser, then I have the problem of lacking permissions to access the desktop (I get the can’t find display :10 error). So, how do you fix this? I thought that there has to be a way giving an ordinary user access to the GPIO. It turn out that you can edit our old friend /etc/rc.local to do this by changing permissions as follows:
chgrp -R dialout /sys/class/gpio chmod -R g+rw /sys/class/gpio
I admit that I’m not entirely sure what this does, but I understand that it gives any user who is a member of the dialout group (which includes all ordinary users) to read and write to GPIO, so you do not need to be a superuser.
And it works! I boot the Pi into the desktop and then autostart the moonclock from the desktop, and it writes into a nice graphical window. Now I always know that the clock should be showing.