Difference between revisions of "LXDM"

From ArchWiki
Jump to: navigation, search
m (Just a minor typo.)
(Simultaneous users and switching users)
(40 intermediate revisions by 14 users not shown)
Line 5: Line 5:
 
LXDM is the lightweight display manager aimed to replace gdm in LXDE distros. The UI is implemented with GTK+. It is still in early stages of development.}}
 
LXDM is the lightweight display manager aimed to replace gdm in LXDE distros. The UI is implemented with GTK+. It is still in early stages of development.}}
 
{{Article summary heading|Related}}
 
{{Article summary heading|Related}}
{{Article summary wiki|Display_Manager}}
+
{{Article summary wiki|LXDE}}
 +
{{Article summary wiki|Display manager}}
 
{{Article summary end}}
 
{{Article summary end}}
  
 
==Installation==
 
==Installation==
[[pacman|Install]] the {{pkg|lxdm}} package which is available in the [[Official Repositories|official repositories]].
+
The {{pkg|lxdm}} package is available in the [[Official Repositories|official repositories]] or {{AUR|lxdm-git}} is available in the [[AUR]].
  
 
== Usage ==
 
== Usage ==
=== SysV ===
 
To make the graphical login the default method of logging into the system, edit {{ic|/etc/inittab}} file (recommended) by adding or uncommenting this line:
 
{{bc|x:5:respawn:/usr/sbin/lxdm >& /dev/null}}
 
 
=== Systemd ===
 
 
Currently, {{pkg|lxdm}} provides an lxdm.service file.  Enable it like any other systemd service:
 
Currently, {{pkg|lxdm}} provides an lxdm.service file.  Enable it like any other systemd service:
  # systemctl enable lxdm.service
+
  # systemctl enable lxdm
  
 
==Configuration==
 
==Configuration==
{{warning|1=The language select control in '''lxdm.conf''' is sometimes required. Set '''lang=1''' or LXDM can potentially enter a boot loop and fail to load your session.}}
+
The configuration files for LXDM are all located in {{ic|/etc/lxdm/}}. The main configuration file is {{ic|lxdm.conf}}, and is well documented in its comments. Another file, {{ic|Xsession}}, is the systemwide x session configuration file and should generally not be edited. The other files in this folder are all shell scripts, which are run when certain events happen in LXDM.
The configuration files for LXDM are all located in {{ic|/etc/lxdm}}. The main configuration file is {{ic|lxdm.conf}}, and is well documented in its comments. Another file, {{ic|Xsession}}, is the systemwide x session configuration file and should generally not be edited. The other files in this folder are all bash scripts, which are run when certain events happen in LXDM.
+
  
 
These are:
 
These are:
# {{ic|LoginReady}}: Is executed with root priviledges when LXDM is ready to show the login window.
+
# {{ic|LoginReady}} is executed with root privileges when LXDM is ready to show the login window.
# {{ic|PreLogin}}: Is run as root before logging a user in.
+
# {{ic|PreLogin}} is run as root before logging a user in.
# {{ic|PostLogin}}: Is run as the logged-in user right after they have logged in.
+
# {{ic|PostLogin}} is run as the logged-in user right after he has logged in.
# {{ic|PostLogout}}: Is run as the logged-in user right after they have logged out.
+
# {{ic|PostLogout}} is run as the logged-in user right after he has logged out.
# {{ic|PreReboot}}: Is run as root before rebooting with LXDM.
+
# {{ic|PreReboot}} is run as root before rebooting with LXDM.
# {{ic|PreShutdown}}: Is run as root before poweroff with LXDM.
+
# {{ic|PreShutdown}} is run as root before poweroff with LXDM.
  
===Expected Logout Behavior===
+
{{warning|1=The language select control in '''lxdm.conf''' is sometimes required and sometimes not. Set '''lang=''' to inverse value of itself when LXDM potentially enters a boot loop and fails to load target sessions.}}
What might be slightly surprising with LXDM is that, by default, it does not clear the last user's desktop background or kill the user's processes when that user logs out. Users desiring this behavior, can edit {{ic|/etc/lxdm/PostLogout}} like this:
+
  
#!/bin/sh
+
=== Unlocking keyrings upon login===
+
{{Note|lxdm 0.4.1-25 ships with {{ic|/etc/pam.d/lxdm}} preconfigured to unlock keyrings upon login. Users no longer need to modify the file.}}
# Kills all your processes when you log out.
+
killall --user $USER -TERM
+
+
# Sets the desktop background to solid black. Useful if you have multiple monitors.
+
xsetroot -solid black
+
  
{{note|This will kill daemons such as tmux, urxvtd, etc.}}
+
=== Adding face icons ===
 +
A 96x96 px image (jpg or png) can optionally be displayed on a per-user basis replacing the stock icon. Simply copy or symlink the target image to {{ic|$HOME/.face}}. The {{Pkg|gnome-control-center}} package supplies some default icons suitable for the lxdm screen.  Look under {{ic|/usr/share/pixmaps/faces}} after installing that package.
 +
 
 +
{{Note|Users need not keep {{Pkg|gnome-control-center}} installed to use this images.  Simply install it, copy them elsewhere, and remove it.}}
  
 
===Default session===
 
===Default session===
 
==== Globally ====
 
==== Globally ====
Edit {{ic|/etc/lxdm/lxdm.conf}} and change the line:
+
 
 +
Edit {{ic|/etc/lxdm/lxdm.conf}} and change the session line to whatever session or DE is desired:
  
 
{{bc|session<nowiki>=</nowiki>/usr/bin/startlxde}}
 
{{bc|session<nowiki>=</nowiki>/usr/bin/startlxde}}
  
to whatever session or DE is desired. To use xfce you would modify it to:
+
Example using xfce:
 
+
 
{{bc|session<nowiki>=</nowiki>/usr/bin/startxfce4}}
 
{{bc|session<nowiki>=</nowiki>/usr/bin/startxfce4}}
  
This is useful for themes that have no visible session selection box, or if you're experiencing trouble using autologin.
+
Example using openbox:
 +
{{bc|session<nowiki>=</nowiki>/usr/bin/openbox-session}}
 +
 
 +
Example using GNOME:
 +
{{bc|session<nowiki>=</nowiki>/usr/bin/gnome-session}}
 +
 
 +
This is useful for themes that have no visible session selection box, and if experiencing trouble using autologin.
  
 
==== Per user ====
 
==== Per user ====
Line 77: Line 75:
 
To log in to one account automatically, without providing a password, find the line in {{ic|/etc/lxdm/lxdm.conf}} that looks like this:
 
To log in to one account automatically, without providing a password, find the line in {{ic|/etc/lxdm/lxdm.conf}} that looks like this:
 
  #autologin=username
 
  #autologin=username
Uncomment it, then substitute your own username instead of "username".
+
Uncomment it, substituting the target user instead of "username".
  
This will cause LXDM to automatically login to the specified account when it first starts up.  However, if one were to log out of that account, one would have to enter its password to log back into it; if the password was empty, that user will be unable to log into the account. To remedy this and be able to log into the account without entering a password, first delete the password:
+
This will cause LXDM to automatically login to the specified account when it first starts up.  However, if one were to log out of that account, one would have to enter its password to log back into it. To avoid this, delete the password:
 +
$ passwd -d USERNAME
  
$ passwd -d USERNAME
+
{{Note|lxdm 0.4.1-25 ships with {{ic|/etc/pam.d/lxdm}} preconfigured to allow users with empty password to log in. Users no longer need to modify the file.}}
  
Then, edit the PAM file for LXDM, which is {{ic|/etc/pam.d/lxdm}}.  The files in this directory describe how users are authenticated by the various installed programs that need to do some sort of authentication.  Change the line that says
+
===Expected logout behavior===
 +
What might be slightly surprising with LXDM is that, by default, it does not clear the last user's desktop background or kill the user's processes when that user logs out.  Users desiring this behavior, can edit {{ic|/etc/lxdm/PostLogout}} like this:
  
  auth    required    pam_unix.so
+
  #!/bin/sh
 +
 +
# Kills all your processes when you log out.
 +
killall --user $USER -TERM
 +
 +
# Sets the desktop background to solid black. Useful if you have multiple monitors.
 +
xsetroot -solid black
  
to this:
+
{{note|This will kill daemons such as tmux, urxvtd, etc.}}
  
auth    required    pam_unix.so nullok
+
Users can replace killall command with the following to exclude ssh and screen processes from termination:
  
This will tell the pam_unix authentication module that blank passwords are to be accepted. After making this change, LXDM will log into accounts with blank passwords.
+
ps --user $USER | egrep -v "ssh|screen" | cut -b11-15 | xargs -t kill
  
=== Unlocking Keyrings upon Login===
+
Or to (hopefully) only kill X-Processes and childs:
  
When using a key manager such as gnome-keyring to manage passwords for ssh keys, {{ic|/etc/pam.d/lxdm}} should be adjusted to allow users to unlock keyrings upon login if desired. The following is a functional configuration:
+
ps --user $USER | cut -f1,2 -d' ' | egrep "\?$" | cut -d' ' -f1 | xargs -t kill
  
#%PAM-1.0
+
Another option than killall is to use loginctl:
auth            requisite      pam_nologin.so
+
auth            required        pam_env.so
+
auth            required        pam_unix.so
+
auth            optional        pam_gnome_keyring.so
+
account        required        pam_unix.so
+
session        required        pam_limits.so
+
session        required        pam_unix.so
+
session        optional        pam_gnome_keyring.so auto_start
+
password        required        pam_unix.so
+
  
=== Sessionlist===
+
#!/bin/sh
 +
 +
# Terminate current user session
 +
/usr/bin/loginctl terminate-session $XDG_SESSION_ID
 +
 +
# Restart lxdm
 +
/usr/bin/systemctl restart lxdm.service
 +
 
 +
{{note|Because the lxdm-binary process is part of the user session and so killed with the other processes of the session, it is required to restart the lxdm service}}
 +
{{note|The variable $XDG_SESSION_ID is described in the man page: pam_systemd}}
 +
 
 +
===Shutdown and reboot commands===
 +
Shutdown and reboot commands can be configured in {{ic|/etc/lxdm/lxdm.conf}} by adding the [cmd] section:
 +
 
 +
[cmd]
 +
# reboot command
 +
reboot=/usr/bin/systemctl reboot
 +
 +
# shutdown command
 +
shutdown=/usr/bin/systemctl poweroff
 +
 
 +
===Session list===
  
 
To add/remove entries to LXDM's session dropdown menu; create/remove the .desktop files in /usr/share/xsessions as desired. A typical .desktop file will look something like:
 
To add/remove entries to LXDM's session dropdown menu; create/remove the .desktop files in /usr/share/xsessions as desired. A typical .desktop file will look something like:
Line 121: Line 139:
 
  Type=XSession
 
  Type=XSession
  
== Simultaneous Users and Switching Users ==
+
===.xinitrc===
 +
By default, LXDM doesn't read ~/.xinitrc but ~/.xprofile. That setup is defined in the {{ic|/etc/lxdm/Xsession}} script.
 +
The default behaviour can be adapted by modifying the {{ic|Xsession}} file like this:
 +
 
 +
#!/bin/bash
 +
 +
LXSESSION="$1"
 +
 +
if [ -f ~/.xinitrc ]; then
 +
  . ~/.xinitrc lxdm
 +
fi
 +
 +
exec /bin/bash -l -c "$LXSESSION"
 +
 
 +
=== Simultaneous users and switching users ===
 
LXDM allows multiple users to be logged into different ttys at the same time.  The following command is used to allow another user to login without logging out the current user:
 
LXDM allows multiple users to be logged into different ttys at the same time.  The following command is used to allow another user to login without logging out the current user:
  
Line 127: Line 159:
  
 
{{Note|When the new user logs in, his/her session is now on the NEXT tty.  For example, user1 logs in and issues the USER_SWITCH command.  Now user2 logs in.  User2 will be on tty8 while user1 will be on tty7.}}
 
{{Note|When the new user logs in, his/her session is now on the NEXT tty.  For example, user1 logs in and issues the USER_SWITCH command.  Now user2 logs in.  User2 will be on tty8 while user1 will be on tty7.}}
 +
 +
If you use the [[Xfce]] desktop, the Switch User functionality of its Action Button panel item specifically looks for the ''gdmflexiserver'' executable in order to enable itself. If you provide it with an executable shell script {{ic|/usr/bin/gdmflexiserver}} consisting of
 +
 +
  #!/bin/sh
 +
  /usr/bin/lxdm -c USER_SWITCH
 +
 +
then user switching in Xfce should work fine also with LXDM.
  
 
[[Xscreensaver]] can also perform this task.  For more, see the [[Xscreensaver#LXDM]] article.
 
[[Xscreensaver]] can also perform this task.  For more, see the [[Xscreensaver#LXDM]] article.
 +
 +
=== PulseAudio ===
 +
 +
After a user logs out, subsequent users have no access to [[PulseAudio]]. The reason is that PulseAudio stores server credentials as properties on the X11 root window, and since LXDM does not restart the X server, these properties are not cleaned up and prevent the sound server from starting up for the next users. To remove these properties on logout, add the following line to {{ic|/etc/lxdm/PostLogout}}:
 +
 +
{{bc|test -x /usr/bin/pax11publish && /usr/bin/pax11publish -r}}
 +
 +
=== Themes ===
 +
 +
There is only one theme provided with LXDM, namely Industrial.  To display the background file wave.svg which is part of this theme, make sure you have {{pkg|librsvg}} installed.

Revision as of 18:37, 5 October 2013

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary end

Installation

The lxdm package is available in the official repositories or lxdm-gitAUR is available in the AUR.

Usage

Currently, lxdm provides an lxdm.service file. Enable it like any other systemd service:

# systemctl enable lxdm

Configuration

The configuration files for LXDM are all located in /etc/lxdm/. The main configuration file is lxdm.conf, and is well documented in its comments. Another file, Xsession, is the systemwide x session configuration file and should generally not be edited. The other files in this folder are all shell scripts, which are run when certain events happen in LXDM.

These are:

  1. LoginReady is executed with root privileges when LXDM is ready to show the login window.
  2. PreLogin is run as root before logging a user in.
  3. PostLogin is run as the logged-in user right after he has logged in.
  4. PostLogout is run as the logged-in user right after he has logged out.
  5. PreReboot is run as root before rebooting with LXDM.
  6. PreShutdown is run as root before poweroff with LXDM.
Warning: The language select control in lxdm.conf is sometimes required and sometimes not. Set lang= to inverse value of itself when LXDM potentially enters a boot loop and fails to load target sessions.

Unlocking keyrings upon login

Note: lxdm 0.4.1-25 ships with /etc/pam.d/lxdm preconfigured to unlock keyrings upon login. Users no longer need to modify the file.

Adding face icons

A 96x96 px image (jpg or png) can optionally be displayed on a per-user basis replacing the stock icon. Simply copy or symlink the target image to $HOME/.face. The gnome-control-center package supplies some default icons suitable for the lxdm screen. Look under /usr/share/pixmaps/faces after installing that package.

Note: Users need not keep gnome-control-center installed to use this images. Simply install it, copy them elsewhere, and remove it.

Default session

Globally

Edit /etc/lxdm/lxdm.conf and change the session line to whatever session or DE is desired:

session=/usr/bin/startlxde

Example using xfce:

session=/usr/bin/startxfce4

Example using openbox:

session=/usr/bin/openbox-session

Example using GNOME:

session=/usr/bin/gnome-session

This is useful for themes that have no visible session selection box, and if experiencing trouble using autologin.

Per user

To define an individual user's preferred session, simply edit his/her respective ~/.dmrc to define the selection.

Example: user1 wants xfce4, user2 wants cinnamon, and user3 wants gnome:

For user1:

[Desktop]
Session=xfce

For user2:

[Desktop]
Session=cinnamon

For user3:

[Desktop]
Session=gnome

Autologin

To log in to one account automatically, without providing a password, find the line in /etc/lxdm/lxdm.conf that looks like this:

#autologin=username

Uncomment it, substituting the target user instead of "username".

This will cause LXDM to automatically login to the specified account when it first starts up. However, if one were to log out of that account, one would have to enter its password to log back into it. To avoid this, delete the password:

$ passwd -d USERNAME 
Note: lxdm 0.4.1-25 ships with /etc/pam.d/lxdm preconfigured to allow users with empty password to log in. Users no longer need to modify the file.

Expected logout behavior

What might be slightly surprising with LXDM is that, by default, it does not clear the last user's desktop background or kill the user's processes when that user logs out. Users desiring this behavior, can edit /etc/lxdm/PostLogout like this:

#!/bin/sh

# Kills all your processes when you log out.
killall --user $USER -TERM

# Sets the desktop background to solid black. Useful if you have multiple monitors.
xsetroot -solid black
Note: This will kill daemons such as tmux, urxvtd, etc.

Users can replace killall command with the following to exclude ssh and screen processes from termination:

ps --user $USER | egrep -v "ssh|screen" | cut -b11-15 | xargs -t kill

Or to (hopefully) only kill X-Processes and childs:

ps --user $USER | cut -f1,2 -d' ' | egrep "\?$" | cut -d' ' -f1 | xargs -t kill

Another option than killall is to use loginctl:

#!/bin/sh

# Terminate current user session
/usr/bin/loginctl terminate-session $XDG_SESSION_ID

# Restart lxdm
/usr/bin/systemctl restart lxdm.service
Note: Because the lxdm-binary process is part of the user session and so killed with the other processes of the session, it is required to restart the lxdm service
Note: The variable $XDG_SESSION_ID is described in the man page: pam_systemd

Shutdown and reboot commands

Shutdown and reboot commands can be configured in /etc/lxdm/lxdm.conf by adding the [cmd] section:

[cmd]
# reboot command
reboot=/usr/bin/systemctl reboot

# shutdown command
shutdown=/usr/bin/systemctl poweroff

Session list

To add/remove entries to LXDM's session dropdown menu; create/remove the .desktop files in /usr/share/xsessions as desired. A typical .desktop file will look something like:

[Desktop Entry]
Encoding=UTF-8
Name=Openbox
Comment=Log in using the Openbox window manager (without a session manager)
Exec=/usr/bin/openbox-session
TryExec=/usr/bin/openbox-session
Icon=openbox.png
Type=XSession

.xinitrc

By default, LXDM doesn't read ~/.xinitrc but ~/.xprofile. That setup is defined in the /etc/lxdm/Xsession script. The default behaviour can be adapted by modifying the Xsession file like this:

#!/bin/bash

LXSESSION="$1"

if [ -f ~/.xinitrc ]; then
  . ~/.xinitrc lxdm
fi

exec /bin/bash -l -c "$LXSESSION"

Simultaneous users and switching users

LXDM allows multiple users to be logged into different ttys at the same time. The following command is used to allow another user to login without logging out the current user:

$ lxdm -c USER_SWITCH
Note: When the new user logs in, his/her session is now on the NEXT tty. For example, user1 logs in and issues the USER_SWITCH command. Now user2 logs in. User2 will be on tty8 while user1 will be on tty7.

If you use the Xfce desktop, the Switch User functionality of its Action Button panel item specifically looks for the gdmflexiserver executable in order to enable itself. If you provide it with an executable shell script /usr/bin/gdmflexiserver consisting of

 #!/bin/sh
 /usr/bin/lxdm -c USER_SWITCH

then user switching in Xfce should work fine also with LXDM.

Xscreensaver can also perform this task. For more, see the Xscreensaver#LXDM article.

PulseAudio

After a user logs out, subsequent users have no access to PulseAudio. The reason is that PulseAudio stores server credentials as properties on the X11 root window, and since LXDM does not restart the X server, these properties are not cleaned up and prevent the sound server from starting up for the next users. To remove these properties on logout, add the following line to /etc/lxdm/PostLogout:

test -x /usr/bin/pax11publish && /usr/bin/pax11publish -r

Themes

There is only one theme provided with LXDM, namely Industrial. To display the background file wave.svg which is part of this theme, make sure you have librsvg installed.