Como criar uma nova sessão de login ao executar o xinit a partir do console?

4

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?

    
por jeremija 20.10.2013 / 13:23

1 resposta

1

Passei a noite toda olhando isso para a configuração do meu console Ubuntu + Openbox e estava no mesmo barco que você. O systemd não é usado totalmente no Ubuntu 13.10, mas substitui o ConsoleKit como você disse. Eu tinha ido tão longe quanto loginctl e queria arrancar meu cabelo, então eu encontrei link que funciona bem.

Meu .xinitrc é o seguinte -

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

Eu usei o script auxiliar no link acima e aliei startx como 'exec path / to / the / helper / script'. Funciona um tratamento e applet nm está jogando bola também.

P.S. Caso o link desapareça acima, aqui está o script auxiliar para substituir o 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" "$@"
    
por Nathan Pardoe 30.10.2013 / 00:57