web-dev-qa-db-fra.com

Comment créer une nouvelle session logind en exécutant xinit à partir de la console?

Mon système actuel démarre sur la console et je ne souhaite pas utiliser de gestionnaire d’affichage.

Après la mise à jour vers Ubuntu 13.10, je me suis rendu compte que le ConsoleKit n'est plus utilisé pour gérer les connexions des utilisateurs et que le service systemd-logind est utilisé.

Ma configuration de .xinitrc pour Ubuntu 13.04 ressemblait à ceci:

exec ck-launch-session startxfce4

Le ck-launch-session m'a permis de monter des disques ou d'arrêter/redémarrer/suspendre le PC.

Le seul endroit où je pouvais trouver de la documentation pour savoir comment activer ces fonctionnalités se trouvait dans documentation pour Arch Linux :

Les utilisateurs doivent d'abord configurer systemd-logind pour gérer leur session. Si systemd est exécuté en tant que démon init système, cela se produit déjà.

Ensuite, l'utilisateur doit lancer systemd en mettant les éléments suivants dans leur ~/.xinitrc: /usr/lib/systemd/systemd --user

L'utilisateur doit supprimer toutes les occurrences de ck-launch-session ou dbus-launch de leur ~/.xinitrc, car ces commandes ne sont pas nécessaires.

Cependant, comme Ubuntu utilise upstart et non le systemd, je ne peux pas le faire avec ma configuration.

J'ai essayé de faire quelque chose de similaire, alors j'ai mis ceci dans mon .xinitrc:

export DESKTOP_SESSION=xfce
init --user

Et la session xfce commence, mais je ne suis toujours pas en mesure de monter les disques durs ou de redémarrer, d’arrêter et de suspendre mon PC. C'est en fait la même chose que d'appeler startxfce4 directement.

Si je démarre le serveur X avec l'argument vt01, où 01 est l'id du tty actuel, tout fonctionne correctement, mais je ne peux pas utiliser des éléments tels que CTRL+C. mettre fin au serveur si quelque chose se bloque. Oui, il existe des solutions comme appeler killall xinit, mais cela ne résout pas le problème.

Je pense que je ne suis pas autorisé à arrêter Si je lance le serveur X dans un nouveau terminal, c'est parce qu'une nouvelle session logind n'est pas créée. Après avoir lu le documentation de logind , je réalise que j’ai probablement besoin de créer une nouvelle session au démarrage du serveur X et que cette session doit être marquée comme active lorsque je suis sur le serveur X. Ceci peut être vérifié avec la commande suivante:

loginctl show-session $XDG_SESSION_ID | grep Active

La ligne suivante dans la documentation de logind m'embrouille:

CreateSession () et ReleaseSession () peuvent être utilisés pour ouvrir ou fermer sessions de connexion. Ces appels ne doivent jamais être invoqués directement par les clients. La création/fermeture de sessions est exclusivement le travail de PAM et de son module pam_systemd.

Ma question est donc la suivante: comment puis-je faire en sorte que PAM crée une nouvelle session de connexion au démarrage du serveur X?

4
jeremija

J'ai passé toute la nuit à regarder cela pour ma configuration de démarrage de la console Ubuntu + Openbox et j'étais dans le même bateau que vous. systemd n'est pas complètement utilisé dans Ubuntu 13.10 mais il remplace ConsoleKit comme vous l'avez dit. Je suis allé aussi loin que loginctl et voulais déchirer mes cheveux, puis j'ai trouvé http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html qui fonctionne un régal.

Mon .xinitrc est comme suit -

exec dbus-launch --sh-syntax --exit-with-session openbox-session

J'ai utilisé le script d'assistance dans le lien ci-dessus et alias startx comme "exec path/to/the/helper/script". Fonctionne comme un régal et nm-applet joue aussi à la balle.

P.S. Si le lien disparaît ci-dessus, voici le script d'assistance pour remplacer startx.

#!/bin/bash
TTY=${TTY:-$(tty)}
TTY=${TTY#/dev/}

if [[ $TTY != tty* ]]; then
  printf '==> ERROR: invalid TTY\n' >&2
  exit 1
fi

printf -v vt 'vt%02d' "${TTY#tty}"

xinit -- "$vt" "$@"
1
Nathan Pardoe