Como desligar com consolekit sem sysvinit (mas com systemd)

8

Eu tenho o systemd (e nenhum sysvinit) instalado em uma caixa do Arch Linux. No entanto, não consigo desligar / reiniciar com o consolekit (interface dbus). # systemctl {shutdown,reboot}funciona muito bem, então acho que é porque o consolekit não sabe como entrar em contato com o pid 1processo.

yuyichao
fonte

Respostas:

3

Depois de dar uma olhada no código-fonte, parece que o consolekit (ck) usa um script curto para desligar e reiniciar. Esses dois scripts são instalados como

/usr/lib/ConsoleKit/scripts/ck-system-{stop,restart}

no Arch Linux e eles simplesmente encontram e {,/usr}/sbin/shutdownexecutam para fazer isso.

Portanto, parece não haver maneira de configurar o ck para fazer isso agora (por normal, eu quero dizer simplesmente editar alguns arquivos /etc), e a solução é simples.

  1. simplesmente edite esses dois scripts para exec systemctl {shutdown,reboot}. (Mas pelo menos no Arch Linux, ele provavelmente será substituído após cada atualização.)

  2. basta criar um script de wrapper para /sbin/shutdownfazer a coisa certa. (Isso causará conflito se você desejar instalar o sysvinit mais tarde, mas espero que não seja um problema.)

Também vou procurar (e criar, se não houver) um relatório de bug sobre o problema e espero que possa ser feito de uma maneira melhor no futuro (realmente não gosto de fazer configurações externas /etc).

NOTA: O Arch Linux agora possui o pacote systemd-sysvcompat que os fornece ( init/ halt/ shutdownetc.) como link simbólico para systemctl/ systemd.

yuyichao
fonte