¿Cómo configurar un servicio OpenRC para que se ejecute en el nivel de "inicio de sesión"?

¿Cómo configurar un servicio OpenRC para que se ejecute en el nivel de "inicio de sesión"?

Quiero que se ejecute un servicio específico de OpenRC después de que mi usuario inicie sesión a través de agetty, LightDM (administrador de pantalla) o de cualquier otra forma.

Esto se debe a que tengo un demonio de emacs ejecutándose como servicio OpenRC para mi usuario específico y necesito que este servicio se inicie solo después de crear una sesión de dbus. Una forma de lograr esto es ejecutar el demonio emacs después del lanzamiento de dbus.(historia relacionada)ejecuta mi sesión principal (actualmente sesión XFCE), lo que, por ejemplo, ocurre después de iniciar sesión a través del administrador de pantalla LightDM.

Lo que hago como solución es: reiniciar emacs después de iniciar sesión con mi usuario para inicializar correctamente la integración de dbus con emacs. Pero esto es simplemente doloroso. Debe haber una mejor manera de hacerlo.

Respuesta1

La wiki de Gentoo tieneuna página que describe varias formas de iniciar servicios para el usuarioen un sistema que usa OpenRC, pero puedes adaptar cualquiera de esos métodos a tu sistema incluso si no usas Gentoo. Hay algunas opciones diferentes, dependiendo de lo que necesites:

  • Utilice la función de inicio automático de su entorno de escritorio, si está disponible. (No uso XFCE, así que no estoy seguro de si tiene esta funcionalidad). Esta es probablemente la opción más fácil de configurar si funciona, especialmente si su servicio necesita conectarse al demonio DBUS porque heredará automáticamente el variables de entorno que le indican cómo acceder a DBUS desde XFCE. Sin embargo, sólo funcionará cuando inicies sesión gráficamente, no con agetty, por lo que parece que no es lo que quieres.

  • Agregue el demonio como un servicio OpenRC normal (lo que significa crear un script para él en /etc/init.d/) y configure PAM para iniciar y detener el servicio cuando inicie o cierre sesión. Esto iniciará el servicio incluso si inicia sesión con un método no gráfico como agetty o SSH. Sin embargo, si hace esto, el servicio no tendrá acceso a las variables de entorno relacionadas con DBUS.

    Es posible que pueda detectar los parámetros relacionados con DBUS dinámicamente (hay un script en la página wiki que muestra cómo puede intentar hacerlo), pero no es lo más sólido. Y, por supuesto, eso depende de que haya un demonio DBUS en ejecución al que conectarse, lo cual solo será así si su entorno de escritorio lo ha iniciado. Si no es así, entonces necesita determinar qué debería hacer su servicio (por ejemplo, ¿debería fallar? ¿debería iniciar su propio demonio DBUS?) e implementarlo.

  • Utilice un administrador de servicios independiente que pueda ejecutar servicios desde un directorio personalizado. (La página wiki se utiliza runsvdircomo ejemplo de esto, pero cualquier otro programa que haga lo mismo debería ser aceptable). Puede iniciar el administrador de servicios de cualquiera de las formas mencionadas anteriormente (un servicio OpenRC controlado por PAM o el administrador de su entorno de escritorio). autostart), o ejecutarlo desde uno de sus archivos de inicio de shell, o tenerlo como un servicio OpenRC que no está controlado por PAM y simplemente se inicia cuando su sistema arranca como todo lo demás, o así sucesivamente. Luego puede definir un servicio para su demonio de emacs en este directorio personalizado y colocar comandos en algún archivo de inicialización adecuado (inicio de shell, PAM, xsessionetc.) para indicarle al administrador de servicios independiente que inicie y detenga ese servicio según sea necesario.

    Esta forma probablemente le brinde la mayor flexibilidad en cómo controla cuándo se ejecuta su demonio de emacs, pero tiene los mismos problemas con DBUS mencionados anteriormente: el administrador de servicios independiente no tendrá acceso a ninguna variable de entorno relacionada con DBUS a menos que lo inicie desde su inicio automático del entorno de escritorio. Por lo tanto, probablemente necesitará utilizar algún tipo de detección dinámica de los parámetros de conexión DBUS si los necesita.

Dependiendo de lo que necesite exactamente, uno u otro de estos enfoques podría ser adecuado para usted. Cualquiera que elija, puede encontrar más detalles sobre cómo implementarlo en la página wiki vinculada.

Respuesta2

Si es posible. Sólo tienes que agregarlo sudo rc-service yourservice startal de tu usuario .bashrc.

Respuesta3

rc-update add <service> <runlevel>

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

información relacionada