Meu sistema atual é inicializado para console e eu não quero usar um gerenciador de exibição.
Após atualizar para Ubuntu 13.10 , percebi que o ConsoleKit não é mais usado para gerenciar logins de usuários e systemd-logind service é usado.
Meu .xinitrc config para o Ubuntu 13.04 ficou assim:
exec ck-launch-session startxfce4
O ck-launch-session me permitiu montar discos ou desligar / reiniciar / suspender o PC.
O único lugar onde eu poderia encontrar documentação sobre como habilitar esses recursos estava na documentação do Arch Linux :
Os usuários devem primeiro configurar o systemd-logind para gerenciar sua sessão. Se o systemd estiver sendo executado como o daemon de inicialização do sistema, isso já está acontecendo.
Em seguida, o usuário deve iniciar o systemd, colocando o seguinte em ~/.xinitrc : /usr/lib/systemd/systemd --user
O usuário deve remover todas as instâncias de ck-launch-session ou dbus-launch de seus ~/.xinitrc , pois esses comandos são desnecessários.
No entanto, como o Ubuntu usa upstart e não o systemd , não posso fazer isso na minha configuração.
Eu tentei fazer algo semelhante, então coloquei isso no meu .xinitrc :
export DESKTOP_SESSION=xfce
init --user
E a sessão do xfce começa, mas ainda não consigo montar os discos rígidos ou reiniciar, desligar e suspender o meu PC. É efetivamente o mesmo que chamar startxfce4 diretamente.
Se eu iniciar o servidor X com o argumento vt01 , onde 01 é o id do atual tty , tudo funciona bem, mas não consigo usar coisas como CTRL+C para finalizar o servidor se algo trava. Sim, existem soluções alternativas como chamar killall xinit , mas isso não resolve o problema.
Eu acho que não tenho permissão para fazer o desligamento Se eu iniciar o servidor X em um novo tty é porque uma nova sessão logind não é cretated. Depois de ler a documentação de log , percebo que provavelmente preciso criar uma nova sessão ao iniciar o X servidor e essa sessão deve ser marcada como ativa quando estou no servidor X. Isso pode ser verificado com o seguinte comando:
loginctl show-session $XDG_SESSION_ID | grep Active
A seguinte linha na documentação do logind me confunde:
CreateSession () e ReleaseSession () podem ser usados para abrir ou fechar sessões de login. Essas chamadas nunca devem ser chamadas diretamente pelos clientes. Criar / fechar sessões é exclusivamente o trabalho do PAM e seu módulo pam_systemd.
Então, minha pergunta é como fazer o PAM criar uma nova sessão de log ao iniciar o servidor X?