Come creare una nuova sessione di logind mentre si esegue xinit dalla console?

4

Il mio sistema attuale si avvia alla console e non voglio usare un display manager.

Dopo l'aggiornamento a Ubuntu 13.10 , mi sono reso conto che ConsoleKit non è più utilizzato per la gestione degli accessi utente e al posto viene utilizzato systemd-logind .

La mia configurazione .xinitrc per Ubuntu 13.04 è stata la seguente:

exec ck-launch-session startxfce4

Il ck-launch-session mi ha permesso di montare dischi o spegnere / riavviare / sospendere il PC.

L'unico posto in cui ho potuto trovare la documentazione su come abilitare queste funzionalità era nella documentazione per Arch Linux :

  

Gli utenti dovrebbero prima configurare systemd-logind per gestire la loro sessione. Se systemd è in esecuzione come il demone di init di sistema, questo sta già accadendo.

     

Successivamente, l'utente deve avviare systemd inserendo quanto segue in ~/.xinitrc : /usr/lib/systemd/systemd --user

     

L'utente deve rimuovere qualsiasi istanza di ck-launch-session o dbus-launch dal suo ~/.xinitrc , poiché tali comandi non sono necessari.

Tuttavia, poiché Ubuntu usa upstart e non systemd , non posso farlo sulla mia configurazione.

Ho provato a fare qualcosa di simile, quindi ho inserito questo nel mio .xinitrc :

export DESKTOP_SESSION=xfce
init --user

E inizia la sessione xfce, ma non riesco ancora a montare gli hard disk o riavviare, spegnere e sospendere il mio PC. È praticamente uguale a chiamare startxfce4 direttamente.

Se avvio il server X con l'argomento vt01 , dove 01 è l'id della corrente tty , tutto funziona correttamente, ma non posso usare cose come CTRL+C per terminare il server se qualcosa si blocca. Sì, ci sono soluzioni alternative come chiamare killall xinit , ma questo non risolve il problema.

Penso di non essere autorizzato a fare shutdown Se avvio il server X in una nuova tty è perché una nuova sessione logind non è cretizzata. Dopo aver letto la documentazione di logind , mi rendo conto che probabilmente ho bisogno di creare una nuova sessione all'avvio della X il server e quella sessione dovrebbero essere contrassegnati come attivi quando sono nel server X. Questo può essere controllato con il seguente comando:

loginctl show-session $XDG_SESSION_ID | grep Active

La seguente riga nella documentazione di logind mi confonde:

  

CreateSession () e ReleaseSession () possono essere utilizzati per aprire o chiudere le sessioni di accesso. Queste chiamate non dovrebbero mai essere invocate direttamente dai client. La creazione / chiusura di sessioni è esclusivamente il lavoro di PAM e il suo modulo pam_systemd.

Quindi la mia domanda è: come posso fare in modo che PAM crei una nuova sessione di log all'avvio del server X?

    
posta jeremija 20.10.2013 - 13:23

1 risposta

1

Ho passato tutta la notte a guardare questo per la mia console di Ubuntu + l'installazione di Openbox ed ero nella stessa barca che tu. systemd non è completamente utilizzato in Ubuntu 13.10 ma sostituisce ConsoleKit come hai detto. Avevo raggiunto il logico e volevo strapparmi i capelli, poi ho trovato link che funziona bene.

My .xinitrc è come segue -

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

Ho usato lo script di aiuto nel link sopra e con alias startx come, 'exec path / to / the / helper / script'. Funziona bene e anche l'applet nm sta giocando a palla.

P.S. Nel caso in cui il link scompaia sopra, ecco lo script di supporto per sostituire 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" "[email protected]"
    
risposta data Nathan Pardoe 30.10.2013 - 00:57

Leggi altre domande sui tag