Moving from Lubuntu 18.04 to 20.10
January 11, 2021 8 Comments
The Lubuntu developers will no longer be supporting Lubuntu 18.04, the final release of Lubuntu to use LXDE, after April this year. I therefore decided to replace it with Lubuntu 20.10 on the family desktop machine (a single-seat, multi-user installation). Lubuntu 20.10 uses LXQt so it was not feasible to upgrade the existing installation, as explained on the official Lubuntu Website:
Note, due to the extensive changes required for the shift in desktop environments, the Lubuntu team does not support upgrading from 18.04 or below to any greater release. Doing so will result in a broken system. If you are on 18.04 or below and would like to upgrade, please do a fresh install.
Thus I had to install Lubuntu 20.10 from scratch. I downloaded the ISO file (1.8 GB) from the official Lubuntu Website and used the dd
command to create a LivePendrive:
user $ sudo blkid # Ascertain which device is the pendrive.
user $ sudo dd bs=4M if=/home/fitzcarraldo/lubuntu-20.10-desktop-amd64.iso of=/dev/sdb conv=fdatasync status=progress
Some of my blog posts during the last three years covered various additions and fixes I made to the Lubuntu 18.04 installation on the family desktop machine. Below I explain how I implemented those, if necessary, in the fresh 20.10 installation.
Due to the automated backup routine I implemented in 2018, a permanently-connected external USB HDD (filesystem label ‘FREECOM HDD’) contained a backup of each users’ home directory from the Lubuntu 18.04 installation:
Lubuntu_home_folders_backup_LXDE/fitzcarraldo/
Lubuntu_home_folders_backup_LXDE/molly/
Lubuntu_home_folders_backup_LXDE/aquilino/
Lubuntu_home_folders_backup_LXDE/cholo/
Lubuntu_home_folders_backup_LXDE/paul/
I installed Lubuntu 20.10, overwriting the Lubuntu 18.04 installation. The resulting 20.10 installation had me as the sole user:
user $ whoami
fitzcarraldo
user $ groups
fitzcarraldo adm cdrom sudo dip plugdev lpadmin sambashare
All the files in my home directory are owned by fitzcarraldo.fitzcarraldo
(user.group). I want all users to be members of the group ‘users
‘ in addition to a group with their own username, so first I added myself to that group:
user $ sudo usermod -a -G users fitzcarraldo
user $ groups
fitzcarraldo adm cdrom sudo dip plugdev users lpadmin sambashare
Before using the groupadd
and useradd
commands I double-checked their options, as these can differ between distributions:
user $ groupadd --help
user $ useradd --help
Then I added the other users (N.B. GID and UID are not the same value per username):
user $ sudo groupadd -g 1002 molly
user $ sudo useradd -m -c "Molly" -g molly -G adm,cdrom,dip,lpadmin,plugdev,sambashare,users -p strawberryfields -s /bin/bash -u 1001 molly
user $ sudo groupadd -g 1003 aquilino
user $ sudo useradd -m -c "Aquilino" -g aquilino -G adm,cdrom,dip,lpadmin,plugdev,sambashare,users -p paperbackwriter -s /bin/bash -u 1002 aquilino
user $ sudo groupadd -g 1004 cholo
user $ sudo useradd -m -c "Cholo" -g cholo -G adm,cdrom,dip,lpadmin,plugdev,sambashare,users -p mysweetlord -s /bin/bash -u 1003 cholo
user $ sudo groupadd -g 1005 paul
user $ sudo useradd -m -c "Paul" -g paul -G adm,cdrom,dip,lpadmin,plugdev,sambashare,users -p sweet16 -s /bin/bash -u 1004 paul
WARNING: Do not add other users to the sudo
group, otherwise Muon Package Manager in Lubuntu 20.10 will not allow you to install any more packages (see [Bug 1875346] Re: Muon does not recognize user password).
Lubuntu 18.04 used the LightDM display manager, whereas Lubuntu 20.10 uses the less-sophisticated SDDM display manager. To display the avatar of each user on the SDDM login page I copied a portrait photograph of each user to the relevant SDDM directory:
user $ sudo cp /home/fitzcarraldo/Pictures/Portraits/fitzcarraldo.png /usr/share/sddm/faces/fitzcarraldo.face.icon
user $ sudo cp /home/fitzcarraldo/Pictures/Portraits/molly.png /usr/share/sddm/faces/molly.face.icon
user $ sudo cp /home/fitzcarraldo/Pictures/Portraits/aquilino.png /usr/share/sddm/faces/aquilino.face.icon
user $ sudo cp /home/fitzcarraldo/Pictures/Portraits/cholo.png /usr/share/sddm/faces/cholo.face.icon
user $ sudo cp /home/fitzcarraldo/Pictures/Portraits/paul.png /usr/share/sddm/faces/paul.face.icon
I also configured a different wallpaper for each user’s Desktop:
user $ sudo mkdir /home/molly/Pictures/Wallpaper
user $ sudo chown molly.molly /home/molly/Pictures/Wallpaper/
user $ sudo mkdir /home/aquilino/Pictures/Wallpaper
user $ sudo chown aquilino.aquilino /home/aquilino/Pictures/Wallpaper/
user $ sudo mkdir /home/cholo/Pictures/Wallpaper
user $ sudo chown cholo.cholo /home/cholo/Pictures/Wallpaper/
user $ sudo mkdir /home/paul/Pictures/Wallpaper
user $ sudo chown paul.paul /home/paul/Pictures/Wallpaper/
user $ cd Pictures/Wallpaper/
user $ sudo cp wallpaper2.jpg /home/molly/Pictures/Wallpaper/
user $ sudo chown molly.molly /home/molly/Pictures/Wallpaper/wallpaper2.jpg
user $ sudo cp wallpaper3.jpg /home/aquilino/Pictures/Wallpaper/
user $ sudo chown aquilino.aquilino /home/aquilino/Pictures/Wallpaper/wallpaper3.jpg
user $ sudo cp wallpaper4.jpg /home/cholo/Pictures/Wallpaper/
user $ sudo chown cholo.cholo /home/cholo/Pictures/Wallpaper/wallpaper4.jpg
user $ sudo cp wallpaper5.jpg /home/paul/Pictures/Wallpaper/
user $ sudo chown paul.paul /home/paul/Pictures/Wallpaper/wallpaper5.jpg
Note that, unlike Lubuntu 18.04, Lubuntu 20.10 does not have a ‘Switch User’ option, so it is not possible for users to switch between sessions without logging out. I actually prefer it this way, as other family members would usually switch user rather than logging out in Lubuntu 18.04, leaving open sessions.
Lubuntu 20.10 still does not automatically unmount the external HDD when a user logs out, thus making it impossible for the next user who logs in to access the external HDD (see Prevent Lubuntu 17.10 from leaving an external HDD mounted incorrectly for other users). The fix in this version of Lubuntu differs from the fix in 18.04; I added the following two lines to the end of /usr/share/sddm/scripts/Xsetup
:
# Fix to make sure each user can access the external HDD udisksctl unmount --block-device '/dev/disk/by-label/FREECOM\x20HDD'
Virus scan
I set up my automated system to scan files downloaded to the ~/Downloads directory as explained below.
user $ sudo apt install clamtk
user $ sudo apt install clamav
user $ sudo apt install clamav-daemon
user $ sudo apt install clamdscan
user $ sudo apt install inotify-tools
user $ sudo apt install kdialog # In Ubuntu this would be zenity instead.
I copied the script ~/.monitorDownloadsGUI
listed below into each user’s home directory, and made the ownership <username>.<username> and the script executable:
#!/bin/bash DIR=$HOME/Downloads # Get rid of old log file, if any rm $HOME/virus-scan.log 2> /dev/null IFS=$(echo -en "\n\b") # Optionally, you can use shopt to avoid creating two processes due to the pipe shopt -s lastpipe inotifywait --quiet --monitor --event close_write,moved_to --recursive --format '%w%f' $DIR | while read FILE # Added '--recursive' so that a directory copied into $DIR also triggers clamscan/clamdscan, although downloads # from the Web would just be files, not directories. do sleep 1s # Have to check file length is nonzero otherwise commands may be repeated if [ -s $FILE ]; then # Replace 'date >' with 'date >>' if you want to keep log file entries for previous scans. date > $HOME/virus-scan.log clamdscan --move=$HOME/virus-quarantine $FILE >> $HOME/virus-scan.log # Use zenity in GNOME; kdialog in KDE and LXQt: # zenity --info --title="Virus scan of $FILE" --text="$(cat $HOME/virus-scan.log)" kdialog --title "Virus scan of $FILE" --msgbox "$(cat $HOME/virus-scan.log)" fi done
I configured each user’s account to execute ~/.monitorDownloadsGUI
at login. To do this in LXQt, in each user’s account I selected ‘Preferences’ > ‘LXQt settings’ > ‘Session Settings’ > ‘Autostart’.
Other useful packages
I installed the Elementary Icon Theme, as I saw some error messages about it not being installed:
user $ sudo apt install elementary-icon-theme
I installed a utility I find useful for searching for the location of a file, and ran the command to update its database of file names (you can run it at any time, or add it to e.g. crontab):
user $ sudo apt install mlocate
user $ sudo updatedb
I use Buku bookmark manager and Thunderbird e-mail client, so I installed those too:
user $ sudo apt install buku
user $ sudo apt install thunderbird
user $ sudo apt install thunderbird-locale-en
I added Buku to my crontab (the location of the binary has changed to /usr/bin/buku
since I wrote my above-mentioned blog post on Buku in 2018):
1,21,41 * * * * rm /home/fitzcarraldo/ownCloud/Bookmarks/*.txt; sleep 30s && /usr/bin/buku -p --nc > /home/fitzcarraldo/ownCloud/Bookmarks/Buku_bookmarks_backup.txt
I prefer Signal to WhatsApp so I installed Signal Desktop by following the instructions at https://signal.org/download/#
Some of my family prefer the Google Chrome browser to Firefox, so I installed that:
user $ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
user $ sudo apt install ./google-chrome-stable_current_amd64.deb
I right-clicked on the Desktop and selected ‘Create Launcher’ to create the file ~/Desktop/Google_Chrome_Web_browser.desktop
for each user (I edited it to change the icon, and ticked ‘Trust this executable’ if not ticked):
[Desktop Entry] Name=Google Chrome Web browser GenericName=Web browser Comment=Google Chrome Web browser Exec=google-chrome Type=Application Icon=google-chrome Terminal=false
I right-clicked on the Desktop and selected ‘Create Launcher’ to create the file ~/Desktop/Firefox_Web_browser.desktop
for each user (I edited it to change the icon, and ticked ‘Trust this executable’ if not ticked):
[Desktop Entry] Name=Firefox Web browser GenericName=Web browser Comment=Firefox Web browser Exec=firefox Type=Application Icon=firefox Terminal=false
I right-clicked on the Desktop and selected ‘Create Launcher’ to create the file ~/Desktop/Signal.desktop
(I edited it to change the icon, and ticked ‘Trust this executable’ if not ticked):
[Desktop Entry] Name=Signal GenericName=Signal messenger Comment=Signal messenger Exec=signal-desktop Type=Application Icon=signal-desktop Terminal=false
All the family use Skype, so I downloaded the .deb
file from https://www.skype.com/en/get-skype/download-skype-for-desktop/ and double-clicked on it to install it.
I right-clicked on the Desktop and selected ‘Create Launcher’ to create the file ~/Desktop/Skype_for_Linux.desktop
(I edited it to change the icon, and ticked ‘Trust this executable’ if not ticked):
[Desktop Entry] Name=Skype for Linux GenericName=Skype messaging Comment=Skype for Linux Exec=skypeforlinux Type=Application Icon=skypeforlinux Terminal=false
I also dragged some of the icons from the Desktop to the Panel in order to create quick-launch items on the Panel, useful when frequently used items on the Desktop are obscured by open windows.
I installed and configured the utility Neofetch that can be used to display system information in a terminal window:
user $ sudo apt install xterm
user $ sudo apt install neofetch
I right-clicked on the Desktop and selected ‘Create Launcher’ to create the file ~/Desktop/Neofetch.desktop
(I edited it to change the icon, and ticked ‘Trust this executable’ if not ticked):
[Desktop Entry] Name=Neofetch GenericName=A command-line system information tool written in Bash Comment=A command-line system information tool written in Bash Exec=xterm -e /bin/bash -c "neofetch; exec /bin/bash" Type=Application Icon=/home/fitzcarraldo/Pictures/Icons/neofetch.png Terminal=false
Firewall
UFW (Uncomplicated Fire Wall) was already installed in Lubuntu 20.10 but not enabled, so I enabled it:
user $ sudo enable ufw
user $ sudo ufw status verbose
I edited /etc/modules-load.d/modules.conf
to add two firewall-related modules needed to enable Samba commands and wsdd
(see further on) to function correctly:
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. iptable_raw xt_pkttype
Bluetooth
The desktop machine has a USB Bluetooth adapter so I installed Blueman as it had not been installed by the Lubuntu 20.10 Installer:
user $ sudo apt install blueman
user $ sudo apt install --reinstall bluez
See also my blog post The phone name assigned automatically by Android on my new phone prevented Bluetooth pairing and connecting in Linux.
Samba
All the machines in my home network use broadcast NetBIOS name resolution and SMB (v2 and v3, not v1) for file sharing, so I installed the packages shown below and copied the smb.conf
from the previous installation, and edited the UFW configuration file as explained in an earlier blog post.
user $ sudo apt install samba
user $ sudo apt install cifs-utils
user $ sudo apt install nbtscan
user $ sudo apt install smbclient
user $ sudo cp /media/fitzcarraldo/FREECOM\ HDD/Lubuntu_home_folders_backup_LXDE/fitzcarraldo/Samba/smb.conf /etc/samba/smb.conf
See the following blog posts for details:
- A correct method of configuring Samba for browsing SMB shares in a home network
- Prevent Linux firewalls interfering with Samba commands in a home network that uses broadcast NetBIOS name resolution
As my home network includes a NAS, I also configured the user accounts to be able to mount the NAS shared folder for Windows applications running under WINE (see How to enable a Windows application in WINE to access a Samba share on a NAS (continued)):
~/Desktop/Mount_server1_user1_share.desktop
[Desktop Entry] Name=Mount_server1_user1_share GenericName=Mount server1 user1 share Comment=Mount server1 user1 share Exec=/home/fitzcarraldo/.mount_server1_user1_share.sh Type=Application Icon=/home/fitzcarraldo/Pictures/Icons/nuvola/128x128/devices/samba_mount.png Terminal=true
~/.mount_server1_user1_share.sh
#!/bin/bash mount_share () { echo echo "Enter your Linux account password below..." echo sudo ln -s /media/server1/user1 ~/$PREFIX/dosdevices/y: sudo mount.cifs //server1/user1/ -o user=user1,pass=<password of user1>,uid=$(id -u),gid=$(id -g) ~/$PREFIX/dosdevices/y: } echo echo "This will mount the Samba share folder user1 on the server1 machine." echo echo echo "== Select which WINEPREFIX you wish to use ==" echo ls ~/.wine-* | grep .wine | awk -F'/' '{print NR " " substr($4, 1, length($4)-1)}' NUMPREFIXES=$(ls ~/.wine-* | grep .wine | wc -l) echo read -p "Enter number (q to abort) and press ENTER: " CHOICE if [ "$CHOICE" != "q" ] && [ "$CHOICE" -gt 0 ] && [ "$CHOICE" -le $NUMPREFIXES ]; then PREFIX=$(ls ~/.wine-* | grep .wine | awk -F'/' '{print NR " " substr($4, 1, length($4)-1)}' | grep "$CHOICE " | awk -F' ' '{print $2}') echo if [ ! -e ~/$PREFIX/dosdevices/y: ]; then mount_share else echo -n "~/$PREFIX/dosdevices/y: already exists. Is it OK to proceed anyway (y/n)? " read ANSWER if [ $ANSWER = "y" ]; then rm ~/$PREFIX/dosdevices/y: mount_share fi fi echo fi if grep -q "/media/server1/user1" /proc/mounts; then echo "Samba share //server1/user1 is mounted for WINEPREFIX ~/$PREFIX ." else echo "Samba share //server1/user1 is not mounted." fi echo echo "You may now close this window." read ANSWER exit
~/Desktop/Unmount_server1_user1_share.desktop
[Desktop Entry] Name=Unmount_server1_user1_share GenericName=Unmount server1 user1 share Comment=Unmount server1 user1 share Exec=/home/fitzcarraldo/.umount_server1_user1_share.sh Type=Application Icon=/home/fitzcarraldo/Pictures/Icons/nuvola/128x128/devices/samba_unmount.png Terminal=true
~/.umount_server1_user1_share.sh
#!/bin/bash echo echo "This will unmount the Samba share folder user1 on the server1 machine." echo echo "Enter your Linux account password below..." echo sudo umount ~/.wine-*/dosdevices/y: 2>/dev/null echo if grep -q "/media/server1/user1" /proc/mounts; then echo "Samba share //server1/user1 is mounted." else echo "Samba share //server1/user1 is not mounted." fi echo echo "You may now close this window." exit
WS-Discovery
As WS-Discovery is required to be able to browse SMB shares in File Explorer in Windows 10 installations these days, I also installed the WS-Discovery daemon. See an earlier blog post for details, including how to configure UFW: Using WS-Discovery to enable Windows 10 to browse SMB shares in my home network of Linux computers
user $ wget https://github.com/christgau/wsdd/archive/master.zip
user $ unzip master.zip
user $ sudo cp wsdd-master/src/wsdd.py /usr/bin/wsdd
user $ sudo cp wsdd-master/etc/systemd/wsdd.service /etc/systemd/system/
I added ‘--workgroup HOME
‘ (the workgroup of all the machines in my home network) to /etc/systemd/system/wsdd.service
and changed the group to ‘nogroup
‘:
[Unit] Description=Web Services Dynamic Discovery host daemon ; Start after the network has been configured After=network-online.target Wants=network-online.target ; It makes sense to have Samba running when wsdd starts, but is not required ;Wants=smb.service [Service] Type=simple ExecStart=/usr/bin/wsdd --shortlog --workgroup HOME ; Replace those with an unprivledged user/group that matches your environment, ; like nobody/nogroup or daemon:daemon or a dedicated user for wsdd User=nobody Group=nogroup ; The following lines can be used for a chroot execution of wsdd. ; Also append '--chroot /run/wsdd/chroot' to ExecStart to enable chrooting ;AmbientCapabilities=CAP_SYS_CHROOT ;ExecStartPre=/usr/bin/install -d -o nobody -g nogroup -m 0700 /run/wsdd/chroot ;ExecStopPost=rmdir /run/wsdd/chroot [Install] WantedBy=multi-user.target
user $ sudo systemctl enable wsdd
user $ sudo systemctl start wsdd
I also installed a script to list WS-Discovery devices on my home network (see A Linux command-line utility to discover and list WSD-enabled computers and printers on a home network). I first copied the directory /media/fitzcarraldo/FREECOM HDD/Lubuntu_home_folders_backup_LXDE/fitzcarraldo/discover
from the backup HDD to my new home directory, then I set up ~/discover/wsd-discover.sh
:
user $ sudo apt install curl # curl is needed in wsd-discover.sh
As one of the awk commands in ~/discover/wsd-discover.sh
would not work in Lubuntu 20.10 I changed the line:
cat /tmp/wsd-probe6.txt | awk -F "******" '{print $1 $3}' > /tmp/wsd-probe7.txt
to:
cat /tmp/wsd-probe6.txt | awk -F "\*\*\*\*\*\*" '{print $1 $3}' > /tmp/wsd-probe7.txt
The Desktop Configuration File (a.k.a. ‘Launcher’ in LXQt) ~/Desktop/Discover_WSD_devices.desktop
contains the following:
[Desktop Entry] Name=Discover_WSD_devices GenericName=Discover WSD devices Comment=Discover WSD devices Exec=/home/fitzcarraldo/discover/wsd-discover.sh Type=Application Icon=/home/fitzcarraldo/Pictures/Icons/Crystal_Clear/png/actions/find.png Terminal=true
I right-clicked on the Desktop and used ‘Create Launcher’ to create the above file. I edited it to change the icon, and ticked ‘Trust this executable’ if not ticked.
WINE
I installed WINE:
user $ sudo apt install wine
Then I copied across all my WINE prefix directories from the backup HDD and reconfigured them. For example, for MyPhoneExplorer:
user $ cd
user $ cp -r /media/fitzcarraldo/FREECOM\ HDD/Lubuntu_home_folders_backup_LXDE/fitzcarraldo/.wine-myphoneexplorer .
user $ export WINEPREFIX=~/.wine-myphoneexplorer
user $ winecfg
user $ cd ~/.wine-myphoneexplorer/drive_c/
user $ wine MyPhoneExplorer_Setup_v1.8.15.exe
Installing the Windows application creates a Desktop Configuration File on the Desktop. For example, the file ~/Desktop/MyPhoneExplorer.desktop
contains:
[Desktop Entry] Name=MyPhoneExplorer Exec=env WINEPREFIX="/home/fitzcarraldo/.wine-myphoneexplorer" wine-stable C:\\\\windows\\\\command\\\\start.exe /Unix /home/fitzcarraldo/.wine-myphoneexplorer/dosdevices/c:/users/Public/Desktop/MyPhoneExplorer.lnk Type=Application StartupNotify=true Path=/home/fitzcarraldo/.wine-myphoneexplorer/dosdevices/c:/users/Public/Start Menu/Programs/MyPhoneExplorer Icon=5A9F_MyPhoneExplorer.0 StartupWMClass=myphoneexplorer.exe
user $ chmod 664 ~/Desktop/MyPhoneExplorer.desktop
user $ ls -la ~/Desktop/MyPhoneExplorer.desktop
-rw-rw-r-- 1 fitzcarraldo fitzcarraldo 436 Jan 2 02:54 /home/fitzcarraldo/Desktop/MyPhoneExplorer.desktop
ownCloud
As I use ownCloud on a server, I installed the ownCloud client (instructions are available on the ownCloud Web site):
user $ wget -nv https://download.owncloud.com/desktop/ownCloud/stable/latest/linux/Ubuntu_20.10/Release.key -O - | sudo apt-key add -
user $ echo 'deb https://download.owncloud.com/desktop/ownCloud/stable/latest/linux/Ubuntu_20.10/ /' | sudo tee -a /etc/apt/sources.list.d/owncloud.list
user $ sudo apt update
user $ sudo apt install owncloud-client
In order to be able to browse my ownCloud folder using WebDAV I installed davfs2:
user $ sudo apt install davfs2
user $ mkdir /home/fitzcarraldo/webdav
I added the following line in ~/.davfs2/secrets
:
https://bsfitzgerald.ddns.net/owncloud/remote.php/webdav bsf <password for my account on my server>
I uncommented the following two lines in /etc/davfs2/davfs2.conf
:
dav_user davfs2 # system wide config file only dav_group davfs2 # system wide config file only
I added the following line to /etc/fstab
:
https://bsfitzgerald.ddns.net/owncloud/remote.php/webdav /home/fitzcarraldo/webdav davfs noauto,user,rw 0 0
See also the following articles regarding configuring Ubuntu for WebDAV browsing:
I created the following Desktop Configuration Files to enable me to mount and unmount the WebDAV-shared folder by double-clicking on Desktop icons:
~/Desktop/Mount_server1_WebDAV_share.desktop
[Desktop Entry] Name=Mount_server1_WebDAV_share GenericName=Mount server1 WebDAV share Comment=Mount server1 WebDAV share Exec=mount /home/fitzcarraldo/webdav Type=Application Icon=/home/fitzcarraldo/Pictures/Icons/Crystal_Clear/png/devices/nfs_mount.png Terminal=true
~/Desktop/Unmount_server1_WebDAV_share.desktop
[Desktop Entry] Name=Unmount_server1_WebDAV_share GenericName=Unmount server1 WebDAV share Comment=Unmount server1 WebDAV share Exec=fusermount -u /home/fitzcarraldo/webdav Type=Application Icon=/home/fitzcarraldo/Pictures/Icons/Crystal_Clear/png/devices/nfs_unmount.png Terminal=true
Prevent suspending to RAM
I configured each user’s LXQt Power Management settings so none of the users’ accounts would suspend to RAM automatically. I may change this in future so I installed a script to enable me to prevent the installation suspending if desired (see How to move a mouse pointer automatically in Linux to simulate user activity):
user $ sudo apt install xdotool # My script to keep the mouse pointer moving automatically (when I run it) uses this.
I right-clicked on the Desktop and selected ‘Create Launcher’ to create the file ~/Desktop/Keep_mouse_moving.desktop
below (and edited it to change the icon, and ticked ‘Trust this executable’):
[Desktop Entry] Name=Keep_mouse_moving GenericName=Keep mouse moving automatically Comment=Keep mouse moving automatically Exec=xterm -iconic -e "bash -c /home/fitzcarraldo/.keep_mouse_moving.sh" Type=Application Icon=input-mouse Terminal=false
I created the script ~/.keep_mouse_moving.sh
containing the following, which I can launch by double-clicking on the desktop icon when I wish:
#!/bin/bash # # Script to keep mouse pointer moving so that, for example, Suspend to RAM timeout does not occur. # # The mouse pointer will move around its current position on the screen, i.e. around any position # on the screen where you place the pointer. However, if you prefer it to move around the centre # of the screen then change mousemove_relative to mousemove in the xdotool command below. # # Set LENGTH to 0 if you do not want the mouse pointer to move. # Set LENGTH to 1 if you want the mouse pointer to move just a tiny fraction. # Set LENGTH to e.g. 100 if you want to see more easily the mouse pointer move. LENGTH=1 # # Set DELAY to the desired number of seconds between each move of the mouse pointer. DELAY=5 # while true do # if [[ `cat /proc/asound/card*/pcm*/sub*/status | grep RUNNING | wc -l` -ne 0 ]]; then for ANGLE in 0 90 180 270 do xdotool mousemove_relative --polar $ANGLE $LENGTH sleep $DELAY done # fi done
Automated backup of users’ home directories
I set up the same backup method that I implemented in the earlier Lubuntu installations (see Backing up users’ home directories in a Linux installation that uses systemd):
/etc/systemd/system/backup-to-usb-hdd.service
[Unit] Description=Backup home directories of all users to USB HDD DefaultDependencies=no Before=shutdown.target halt.target RequiresMountsFor=/home [Service] Type=oneshot ExecStart=/usr/local/sbin/backup_home_directories.sh [Install] WantedBy=halt.target shutdown.target
/usr/local/sbin/backup_home_directories.sh
#!/bin/bash # This script backs up to an external USB HDD (NTFS) labelled "FREECOM HDD" the contents of the home directories # of the users of this Lubuntu 20.10 installation if the system is shutting down but not rebooting. # It is launched by a systemd service /etc/systemd/system/backup-to-usb-hdd.service. # Find out if the system is rebooting (as opposed to being shut down): REBOOT=$( systemctl list-jobs | egrep -q 'reboot.target.*start' && echo "rebooting" || echo "not_rebooting" ) if [ $REBOOT = "not_rebooting" ]; then # Only execute the following steps if the system is shutting down but not rebooting: # Clean up if the backup did not complete last time: umount /media/usbhdd 2>/dev/null # Make sure you enter this line correctly. rm -rf /media/usbhdd/* # Make sure you enter this line correctly. # Unmount the external USB HDD if mounted by udisks2 with the logged-in username in the path: umount /media/*/FREECOM\ HDD 2>/dev/null # Find out the USB HDD device: DEVICE=$( blkid | grep "FREECOM\ HDD" | cut -d ":" -f1 ) # Create a suitable mount point if it does not already exist, and mount the device on it: mkdir /media/usbhdd 2>/dev/null mount -t ntfs-3g -o async,noexec,nodev,noatime,nodiratime $DEVICE /media/usbhdd 2>/dev/null # Create the backup directory on the USB HDD if it does not already exist: mkdir /media/usbhdd/Lubuntu_home_folders_backup 2>/dev/null # Backup recursively all the home directories of all the users, and add a time-stamped summary to the log file: echo "********** Backing up Acer Aspire XC600 users' home directories **********" >> /home/fitzcarraldo/backup.log date >> /home/fitzcarraldo/backup.log # Log username of user shutting down the PC (may not be this user if Switch User was used): echo -ne "User who shutdown PC (may not be this user if Switch User has been used): " >> /home/fitzcarraldo/backup.log last | cut -d " " -f1 | head -1 >> /home/fitzcarraldo/backup.log sleep 2s # cp --recursive --update --preserve=all --no-dereference --force /home/ /media/usbhdd/Lubuntu_home_folders_backup 2>> /home/fitzcarraldo/backup.log rsync --ignore-errors --recursive --times --perms --links --protect-args --exclude '/*/.cache/mozilla' --exclude '/*/.cache/google-chrome' --exclude '/*/.cache/chromium' --delete-excluded --bwlimit=22500 /home/ /media/usbhdd/Lubuntu_home_folders_backup 2>> /home/fitzcarraldo/backup.log echo "Copying completed" >> /home/fitzcarraldo/backup.log date >> /home/fitzcarraldo/backup.log echo "********** Backup completed **********" >> /home/fitzcarraldo/backup.log cp /home/fitzcarraldo/backup.log /media/usbhdd/Lubuntu_home_folders_backup/fitzcarraldo/ # Unmount the USB HDD so that udisks2 can subsequently re-mount it with the user's username in the path: umount /media/usbhdd fi exit 0
user $ sudo systemctl enable backup-to-usb-hdd
user $ sudo systemctl start backup-to-usb-hdd
Keyboard layouts
As I want to be able to switch between English, Brazilian Portuguese and Spanish keyboard layouts, I did the following:
I added the following lines to the file /usr/share/sddm/scripts/Xsetup
:
#Make sure the keyboards I use are selectable on the SDDM greeter screen setxkbmap gb,us,br,es #
I edited the file /etc/X11/xorg.conf.d/00-keyboard.conf
so that it contains the following:
# Read and parsed by systemd-localed. It's probably wise not to edit this file # manually too freely. Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "gb,us,br,es" Option "XkbModel" "pc105" Option "XkbOptions" "grp:alt_shift_toggle" EndSection
I right-clicked on the Panel for each user, selected ‘Manage Widgets’ and added the ‘Keyboard state indicator’ to the Panel.
Conclusion
The resulting Lubuntu 20.10 installation is working fine so far. It has a more contemporary look than the LXDE Desktop in Lubuntu 18.04. My family is already using it and, so far, there have been no adverse comments or problems.
I have been running all my old iMacs on Lubuntu. Also the mac-mini of my wife is the every day maschine…
Because of the special boot loader a complete new Installation sounds like a nightmare to me 😨
It’s a pity that it is not possible to upgrade 18.04 due to the change in Desktop Environment, but I hope it will be simple enough for me to upgrade from 20.10 to the next version without needing to install from scratch.
After I installed VirtualBox I noticed the following message appeared on the console when booting Lubuntu 20.10:
[FAILED] Failed to start VirtualBox Web Service.
First I tried the approach given in the following answer to the question ‘How can I get vboxweb to start properly at boot’ on the askubuntu Website (I had to use the command ‘
sudo su
‘ before pasting the lines of code given in that answer):https://askubuntu.com/a/1131057
but the error message still appeared when I rebooted. Then I used the command ‘
groups
‘ to check the groups my user account belonged to, and I noticed that my user account did not belong to the ‘vboxusers
‘ group. So I added myself manually to that group. When I rebooted, the error message no longer appeared on the console. I am not sure if the combination of the two above-mentioned steps was necessary, or whether it is only necessary to add the user to the ‘vboxusers
‘ group.The
update-rc.d
command is for SysVinit, so I now think I only needed to add the user to the ‘vboxusers
‘ group. So I have now removed all the SysVinit symlinks created by the first step:$ sudo update-rc.d vboxautostart-service remove
$ sudo update-rc.d vboxballoonctrl-service remove
$ sudo update-rc.d vboxweb-service remove
$ cd /etc/init.d
$ sudo rm vboxautostart-service
$ sudo rm vboxballoonctrl-service
$ sudo rm vboxweb-service
I then checked in the directories
/etc/rc*.d
to make sure the symlinks to the three services/etc/init.d/vbox*-service
had been removed. They had.See http://manpages.ubuntu.com/manpages/groovy/man8/update-rc.d.8.html
And, actually, VirtualBox Web Service is intended for controlling VirtualBox remotely, so it is not even needed on my family’s desktop machine, so I ended up doing the following:
$ sudo systemctl disable vboxweb.service
See https://docs.oracle.com/en/virtualization/virtualbox/6.1/admin/AdvancedTopics.html#vboxwebsrv-daemon
A relatively minor, albeit annoying, problem surfaced in the new Lubuntu 20.10 installation since I published my blog post: I and other family members found that, occasionally, audio does not work after we log in. This never happened in Lubuntu 18.04 on the same machine with exactly the same hardware.
It is possible for the affected user to get audio working again by launching QTerminal and entering the command
pulseaudio -k
. Alternatively, launching pavucontrol (click ‘Mixer’ on the LXQt Volume Control widget on the Panel), clicking on the Configuration tab then changing and changing back the Profile for Built-in Audio would sometimes (but not always) get audio working again.As the problem occurs infrequently and as the settings in
alsamixer
look OK, I began to suspect the problem is somehow timing-related, possibly due to PulseAudio or systemd. I tried several of the suggestions on the Web regarding PulseAudio configuration files — such as adding or changing module commands, modifying the exit-idle-time and so on — but none fixed the problem.As I could not find the root cause I have implemented a work-around; I configured each user’s account to restart PulseAudio when the user logs in to LXQt. This can be done in each user’s session via the desktop GUI as follows:
Select ‘Application Menu’ > ‘Preferences’ > ‘LXQt settings’ > ‘Session Settings’.
Click on ‘Autostart’.
Click on ‘LXQt Autostart’.
Click on ‘Add’.
In the ‘Name’ box enter ‘No_sound_work-around’ (without the quotation marks).
In the ‘Command’ box enter ‘pulseaudio -k’ (without the quotation marks).
Click on ‘OK’.
Alternatively, it is possible to create the Desktop Configuration File
No_sound_work-around.desktop
in each user’s~/.config/autostart/
directory, containing the following lines:[Desktop Entry]
Exec=pulseaudio -k
Name=No_sound_work-around
OnlyShowIn=LXQt;
Type=Application
Version=1.0
Set the permissions to be the same as other Desktop Configuration Files in the directory:
$ chmod 664 ~/.config/autostart/No_sound_work-around.desktop
Anyway, as the behaviour is intermittent, only time will tell if the above work-around has stopped the problem occurring. But, so far, so good.
Unlike the Lubuntu 18.04 Installer, the Lubuntu 20.10 Installer did not create any swap space at all, i.e. neither a swapfile nor a swap partition. Nevertheless the resulting Lubuntu 20.10 installation worked fine. But, as I still wanted users to have the ability to put the machine into hibernation, I repeated exactly the steps given in my July 2018 blog post ‘Configuring Lubuntu 18.04 to enable hibernation using a swap file’, even though no /swapfile pre-existed. The procedure in that post still worked fine, and the Lubuntu 20.10 installation can now hibernate and thaw without any trouble.
Another niggle with Lubuntu 20.10, and this one is easy to fix. When resuming after Suspend to RAM, the desktop is momentarily revealed before the
xscreensaver
lockscreen appears. The user might not want the contents of the desktop to be visible, even briefly, in case someone else has woken the machine from sleep. To stop this happening, from the LXQt Application Menu:1. Select ‘Preferences’ > ‘Screensaver’.
2. Click on the ‘Advanced’ tab.
3. Untick ‘Fade to Black when Blanking’.
I can recommend Ade Malsasa Akbar’s 2018 post ‘Beautiful Desktop Effects On Lubuntu LXQt’:
https://www.ubuntubuzz.com/2018/12/beautiful-desktop-effects-on-lubuntu-lxqt.html
It makes LXQt in Lubuntu 20.10 on my family’s desktop machine look even nicer. I do notice a performance hit when compositing is enabled in the way he suggests, though; the response is a little sluggish with X Render selected as the rendering back-end, which is not entirely surprising (X Rendering is also referred to as ‘software rendering’, and ‘OpenGL’ as ‘hardware rendering’). The oldish hardware on my family’s machine supports OpenGL, and performance is noticeably better if GLX (OpenGL) is selected as the rendering back-end. The hardware running Lubuntu 20.10 on my family’s machine is as follows:
Intel Pentium CPU G2030 (2-core) @ 3.00GHz
Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)