Como configurar um serviço OpenRC para rodar no nível “login”?

Como configurar um serviço OpenRC para rodar no nível “login”?

Quero que um serviço específico do OpenRC seja executado após o login do meu usuário através do agetty, LightDM (gerenciador de exibição) ou de qualquer outra forma.

Isso ocorre porque tenho um daemon emacs em execução como serviço OpenRC para meu usuário específico e preciso que esse serviço seja iniciado somente após a criação de uma sessão dbus. Uma maneira de fazer isso é executar o daemon emacs após o dbus-launch(história relacionada)executa minha sessão principal (atualmente sessão XFCE), que por exemplo acontece após um login através do gerenciador de exibição LightDM.

O que faço como solução alternativa é: reiniciar o emacs após fazer login com meu usuário para inicializar corretamente a integração do dbus com o emacs. Mas isso é simplesmente doloroso. Deve haver uma maneira melhor de fazer isso.

Responder1

O wiki do Gentoo temuma página que descreve várias maneiras de lançar serviços ao usuárioem um sistema que usa OpenRC, mas você pode adaptar qualquer um desses métodos ao seu sistema mesmo se não usar o Gentoo. Existem algumas opções diferentes, dependendo do que você precisa:

  • Use a funcionalidade de inicialização automática do seu ambiente de desktop, se disponível. (Eu não uso o XFCE, então não tenho certeza se ele possui essa funcionalidade.) Esta é provavelmente a opção mais fácil de configurar se funcionar, especialmente se o seu serviço precisar se conectar ao daemon DBUS porque ele herdará automaticamente o variáveis ​​de ambiente que informam como acessar o DBUS do XFCE. No entanto, só funcionará quando você fizer login graficamente, não com o agetty, então parece que não é o que você deseja.

  • Adicione o daemon como um serviço OpenRC regular (o que significa criar um script para ele /etc/init.d/) e configure o PAM para iniciar e parar o serviço quando você efetuar login ou logout. Isso iniciará o serviço mesmo se você fizer login com um método não gráfico como agetty ou SSH. No entanto, se você fizer isso, o serviço não terá acesso às variáveis ​​de ambiente relacionadas ao DBUS.

    Você pode detectar os parâmetros relacionados ao DBUS dinamicamente - há um script na página wiki mostrando como você pode tentar fazer isso - mas não é a coisa mais robusta. E, claro, isso depende da existência de um daemon DBUS em execução para se conectar, o que só acontecerá se ele tiver sido iniciado pelo seu ambiente de desktop. Caso contrário, você precisa descobrir o que seu serviço deve fazer (por exemplo, ele deve falhar? deve iniciar seu próprio daemon DBUS?) e implementá-lo.

  • Use um gerenciador de serviços separado que possa executar serviços de um diretório personalizado. (A página wiki usa runsvdirisso como exemplo, mas qualquer outro programa que faça a mesma coisa deve ser aceitável.) Você pode iniciar o gerenciador de serviços de qualquer uma das maneiras mencionadas anteriormente (um serviço OpenRC controlado pelo PAM ou o seu ambiente de desktop autostart), ou executá-lo a partir de um dos arquivos init do shell, ou tê-lo como um serviço OpenRC que não é controlado pelo PAM e apenas inicia quando o sistema inicializa como todo o resto, ou assim por diante. Em seguida, você pode definir um serviço para seu daemon emacs neste diretório personalizado e colocar comandos em algum arquivo de inicialização adequado (inicialização do shell, PAM, xsessionetc.) para informar ao gerenciador de serviços separado para iniciar e parar esse serviço conforme necessário.

    Dessa forma, provavelmente você terá mais flexibilidade em como controlar quando seu daemon emacs é executado, mas tem os mesmos problemas com o DBUS mencionados anteriormente: o gerenciador de serviços separado não terá acesso a nenhuma variável de ambiente relacionada ao DBUS, a menos que você o inicie a partir do seu inicialização automática do ambiente de desktop. Portanto, você provavelmente precisará usar algum tipo de detecção dinâmica de parâmetros de conexão DBUS, se precisar deles.

Dependendo exatamente do que você precisa, uma ou outra dessas abordagens pode ser adequada para você. Qualquer que você escolher, você pode encontrar mais detalhes sobre como implementá-lo na página wiki vinculada.

Responder2

Sim é possivel. Você só precisa adicionar sudo rc-service yourservice startao arquivo .bashrc.

Responder3

rc-update add <service> <runlevel>

fonte:https://wiki.gentoo.org/wiki/OpenRC_to_systemd_Cheatsheet

informação relacionada