systemd-logind

De ArchwikiFR


systemd-logind est un service permettant de gérer les sessions utilisateur dans un système utilisant systemd en tant que système init.

Important : Cette page ne s'applique que pour les systèmes démarrant avec systemd.

A propos

La gestion des sessions d'utilisateur comprend, entre autre :

  • Le suivi des sessions, de leurs processus et du temps d'inaction de l'utilisateur
  • L'accès selon les droits à des actions telles que l'arrêt, le redémarrage, la mise en veille...
  • La désactivation de certaines actions (selon le besoin) comme la mise en veille.
  • Le basculement d'une session à l'autre.
  • La gestion de stations de travail multiples. [1]

systemd-logind est fourni par le paquet systemd et démarré automatiquement par systemd.

Les sessions utilisateur sont suivies par pam_systemd lancé lors des connexions (par le biais de fichiers dans /etc/pam.d).

Utilisation

logind peut être interrogé par la commande loginctl.

Pour l'exemple, je suis connecté sur une session graphique et depuis une connexion ssh.

$ loginctl
SESSION        UID USER             SEAT            
         2       1000 tuxce            seat0           
         3       1000 tuxce                            

2 sessions listed.

On peut avoir les informations concernant une session, y compris les processus lancés, avec :

$ loginctl session-status 2
2 - tuxce (1000)
	   Since: Thu, 27 Sep 2012 18:23:48 +0200; 23h ago
	  Leader: 702 (gdm-session-wor)
	    Seat: seat0; vc1
	 Display: :1
	 Service: gdm-password; type x11; class user
	   State: active
	  CGroup: name=systemd:/user/tuxce/2
		  ├  702 gdm-session-worker [pam/gdm-password]
		  ├ ...
		  └ 4647 loginctl session-status 2

Ou encore avoir la totalité des informations concernant un utilisateur :

$ loginctl user-status tuxce
tuxce (1000)
	   Since: Thu, 27 Sep 2012 18:23:48 +0200; 23h ago
	   State: active
	Sessions: 3 *2
	  CGroup: name=systemd:/user/tuxce
		  ├ 3
		  │ ├ 4691 sshd: tuxce [priv]
		  │ ├ ...
		  │ └ 4732 loginctl user-status tuxce
		  └ 2
		    ├  702 gdm-session-worker [pam/gdm-password]
		    └ ...

On peut utiliser loginctl pour agir sur les sessions :

  • Tuer une session en envoyant SIGTERM à tous ses processus :
    loginctl kill-session 3
  • Basculer d'une session à l'autre :
    loginctl activate numero_session_a_activer
  • Verrouiller toutes les sessions (non forcément pris en compte par les gestionnaires de bureau) :
    loginctl lock-sessions
  • ...

Interaction avec polkit

La partie la plus visible de l'utilisation de logind est l'état de la session donnée à polkit. Ce dernier permet de donner accès avec ou sans authentification ou de refuser l'accès à des opérations diverses telles que l'arrêt, le redémarrage, la mise en veille ou encore, selon le programme utilisé, au montage de périphériques de stockage, etc..

Pour cela, polkit se base sur deux critères : l'endroit d'où vous avez ouvert votre session et son état :

$ loginctl session-status 2 | egrep '(Seat|State):'
	    Seat: seat0; vc1
	   State: active
  • Seat indique d'où la session a été ouverte. polkit considère une session comme étant locale si cette propriété est renseignée.
  • State indique si votre session est :
    • active : qu'elle est en premier plan et que vous pouvez interagir avec.
    • en ligne (online) : qu'elle est en arrière plan. Typiquement quand vous changez d'utilisateur sous X.
    • fermeture (closing) : la session est terminée mais des processus restent en cours.

Prenons par exemple les permissions pour éteindre votre machine :

$ pkaction --action-id org.freedesktop.login1.power-off --verbose
org.freedesktop.login1.power-off:
  description:       Power off the system
  message:           Authentication is required for powering off the system.
  vendor:            The systemd Project
  vendor_url:        http://www.freedesktop.org/wiki/Software/systemd
  icon:              
  implicit any:      auth_admin_keep
  implicit inactive: auth_admin_keep
  implicit active:   yes

On voit que toute session locale et active (implicit active) peut éteindre sans s'authentifier alors que les sessions locales mais non actives (implicit inactive) ainsi que les sessions distantes ((implicit any) doivent s'identifier avant.

logind.conf

/etc/systemd/logind.conf permet de modifier certaines actions gérées par logind.

Par exemple, vous pouvez affecter l'une des actions suivantes (liste non exhaustive) :

  • ignore
  • poweroff
  • reboot
  • suspend

Aux évènements suivants :

  • HandlePowerKey : appui sur le bouton d'alimentation.
  • HandleSuspendKey : appui sur le bouton de mise en veille.
  • HandleHibernateKey : appui sur le bouton d'hibernation.
  • HandleLidSwitch : rabattre l'écran d'un ordinateur portable.

Par exemple:

HandleLidSwitch=ignore

pour ignorer la mise en veille lors de la fermeture de l'écran.

Liens

Stations multiples : Multiseat configuration, multiseat, multiseat sur Fedora 17.