Lock screen after switching from GDM to LightDM

  •  

When switching from GDM to LightDM, the screen locking no longer works. Even putting it into hibernate / suspend, the session isn't locked. The cause lies in the fact that GDM has screen locking built in, where LightDM doesn't.

This means another 'helping' package is required to get screen locking to work with LightDM again. Below you'll find examples getting it to work with three different methods:

Lock screen in LightDM using gnome-screensaver

Earlier versions of GDM used this gnome-screensaver package to provide the locking feature, but recent versions have it removed because GDM3 has the locking built in. Nonetheless, LightDM has working support for gnome-screensaver.

1. Installing gnome-screensaver

apt install gnome-screensaver

The deamon won't be started until the computer has been started (because the package generate an autostart item). Optionally it can by manually invoked for testing:

# Remove the "&" at the end if you want to be able to kill the process using CTRL+C, othwewise it runs as a background process
gnome-screensaver &

2. Invoking light-locker when hybernate / sleep

This works right out of the box, no configuration needed. However it must be enabled under Settings → Power.

3. Setting up Super + L shortcut

This also works right out of the box, taking into account you set up the keyboard shortcut correctly. See Settings → Devices → Keyboard and check the Lock Screen shortcut.


Lock screen in LightDM using i3lock

The i3lock package is a utra lightweight and minimal screen locker, therefore it's very much in line with LightDM's philosophy of being… Erm, lightweight.

1. Installing i3lock

apt install i3lock

2. Invoking i3lock when hibernate / suspend

Before your system goed into sleep mode, a script will call i3lock, as described, create a a file /etc/systemd/system/lockbeforesleep@user.service, replacing user with your username. And fill it with the following content:

[Unit]
Description=Turning i3lock on before sleep
Before=sleep.target

[Service]
User=%I
Type=forking
Environment=DISPLAY=:0
ExecStart=/usr/bin/i3lock -i /home/user/Pictures/your_wallpaper.png
ExecStartPost=/usr/bin/sleep 1

[Install]
WantedBy=sleep.target

Then, the service needs to be enabled, and optionally tested:

sudo systemctl enable lockbeforesleep@user.service
sudo systemctl daemon-reload

# Optionally test the service
systemctl suspend

3. Setting up Super + L shortcut

Either use the Settings-app and navigate to Devices → Keyboard to create a new shortcut calling the following command: /usr/bin/i3lock -i /home/user/Pictures/your_wallpaper.png or use the commands below to automate the process:

# Clear current screensave command, to free up Super + L
dconf write /org/gnome/settings-daemon/plugins/media-keys/screensaver "''"

# Create new entry
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/binding "'<Super>l'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/name "'LightDM i3lock'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/command "'/usr/bin/i3lock -i /home/user/Pictures/your_wallpaper.png'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"

Lock screen in LightDM using light-locker

1. Installing light-locker

apt install light-locker

2. Invoking light-locker when hibernate / suspend

Before your system goed into sleep mode, a script will call i3lock, as described, create a a file /etc/systemd/system/lockbeforesleep@user.service, replacing user with your username. And fill it with the following content:

[Unit]
Description=Turning light-locker on before sleep
Before=sleep.target

[Service]
User=%I
Type=forking
Environment=XDG_SEAT_PATH="/org/freedesktop/DisplayManager/Seat0"
ExecStart=/usr/bin/dm-tool lock
ExecStartPost=/usr/bin/sleep 1

[Install]
WantedBy=sleep.target

Then, the service needs to be enabled, and optionally tested:

sudo systemctl enable lockbeforesleep@user.service
sudo systemctl daemon-reload

# Optionally test the service
systemctl suspend

3. Setting up Super + L shortcut

Either navigate to Settings → Devices → Keyboard to create a new shortcut calling the following command: dm-tools lock or use the commands below to automate the process:

# Clear current screensave command, to free up Super + L
dconf write /org/gnome/settings-daemon/plugins/media-keys/screensaver "''"

# Create new entry
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/binding "'<Super>l'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/name "'LightDM light-locker'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/command "'dm-tools lock'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"

That's it, hit Super + L and see if it works!

References

  1. https://unix.stackexchange.com/questions/86221/how-can-i-lock-my-screen-in-gnome-3-without-gdm
  2. https://www.reddit.com/r/gnome/comments/9klvej/is_there_a_way_to_get_the_screen_to_lock_with/
  3. https://forum.manjaro.org/t/how-to-fix-lock-screen-after-changing-gdm-to-lightdm/62751
  4. https://askubuntu.com/questions/632384/lock-screen-from-root-shell