"로그인" 수준에서 실행되도록 OpenRC 서비스를 어떻게 설정합니까?

"로그인" 수준에서 실행되도록 OpenRC 서비스를 어떻게 설정합니까?

내 사용자가 agetty, LightDM(디스플레이 관리자) 또는 기타 수단을 통해 로그인한 후 OpenRC의 특정 서비스가 실행되기를 원합니다.

이는 특정 사용자를 위한 OpenRC 서비스로 실행되는 emacs 데몬이 있고 dbus 세션이 생성된 후에만 해당 서비스를 시작해야 하기 때문입니다. 이를 달성하는 한 가지 방법은 dbus-launch 후에 emacs 데몬을 실행하는 것입니다.(관련 이력)예를 들어 LightDM 디스플레이 관리자를 통해 로그인한 후에 기본 세션(현재 XFCE 세션)이 실행됩니다.

내가 한 해결 방법은 사용자로 로그인한 후 emacs를 다시 시작하여 emacs와의 dbus 통합을 올바르게 초기화하는 것이었습니다. 하지만 고통스러울 뿐입니다. 이를 수행하는 더 좋은 방법이 있어야 합니다.

답변1

젠투 위키에는사용자 서비스를 시작하는 다양한 방법을 설명하는 페이지OpenRC를 사용하는 시스템에서는 젠투를 사용하지 않더라도 이러한 방법 중 하나를 시스템에 적용할 수 있습니다. 필요에 따라 몇 가지 다른 옵션이 있습니다.

  • 가능한 경우 데스크탑 환경의 자동 시작 기능을 사용하십시오. (저는 XFCE를 사용하지 않기 때문에 이 기능이 있는지 잘 모르겠습니다.) 작동한다면 이는 설정하기 가장 쉬운 옵션일 것입니다. 특히 서비스가 DBUS 데몬에 연결되어야 하는 경우에는 더욱 그렇습니다. XFCE에서 DBUS 환경 변수에 액세스하는 방법을 자동으로 상속합니다. 그러나 agetty를 사용하지 않고 그래픽으로 로그인하는 경우에만 작동하므로 원하는 것이 아닌 것 같습니다.

  • 데몬을 일반 OpenRC 서비스로 추가하고(즉, 에서 이에 대한 스크립트 생성을 의미함 /etc/init.d/) 로그인하거나 로그아웃할 때 서비스를 시작하고 중지하도록 PAM을 설정합니다. agetty 또는 SSH와 같은 비그래픽 방법을 사용하여 로그인하는 경우에도 서비스가 시작됩니다. 그러나 이렇게 하면 해당 서비스는 DBUS 관련 환경 변수에 접근할 수 없게 됩니다.

    DBUS 관련 매개변수를 동적으로 감지할 수 있습니다. 위키 페이지에 이를 수행하는 방법을 보여주는 스크립트가 있습니다. 그러나 이것이 가장 강력한 것은 아닙니다. 물론 이는 연결할 수 있는 실행 중인 DBUS 데몬이 있어야 하며 이는 데스크톱 환경에서 시작하는 경우에만 해당됩니다. 그렇지 않은 경우 서비스가 수행해야 하는 작업(예: 실패해야 하는지, 자체 DBUS 데몬을 시작해야 하는지 등)을 파악하고 구현해야 합니다.

  • 사용자 정의 디렉토리에서 서비스를 실행할 수 있는 별도의 서비스 관리자를 사용하십시오. (위키 페이지는 runsvdir이에 대한 예로 사용되지만 동일한 작업을 수행하는 다른 프로그램은 허용되어야 합니다.) 서비스 관리자(PAM에 의해 제어되는 OpenRC 서비스 또는 데스크탑 환경의 자동 시작)를 시작하거나 다음을 실행할 수 있습니다. 셸 초기화 파일 중 하나에서 가져오거나 PAM에 의해 제어되지 않고 다른 시스템처럼 시스템 시작 시 시작되는 OpenRC 서비스로 만듭니다. 그런 다음 이 사용자 정의 디렉토리에서 emacs 데몬에 대한 서비스를 정의하고 명령을 적절한 초기화 파일(셸 시작, PAM xsession등)에 넣어 별도의 서비스 관리자에게 서비스를 시작하고 중지하도록 지시할 수 있습니다.

    이 접근 방식은 아마도 emacs 데몬이 실행되는 시기를 제어하는 ​​데 가장 큰 유연성을 제공하지만 앞서 언급한 DBUS와 동일한 문제를 안고 있습니다. 독립 실행형 서비스 관리자는 사용자가 직접 시작하지 않는 한 DBUS 관련 환경 변수에 액세스할 수 없습니다. 이맥스 데몬. 데스크탑 환경의 자동 시작. 따라서 필요한 경우 DBUS 연결 매개변수에 대한 일종의 동적 감지를 사용할 수 있습니다.

특정 요구 사항에 따라 이러한 방법 중 하나가 적합할 수 있습니다. 어느 것을 선택하든 링크된 위키 페이지에서 구현 방법에 대한 자세한 내용을 확인할 수 있습니다.

답변2

예, 가능합니다. 사용자 sudo rc-service yourservice start.bashrc.

답변3

rc-update add <service> <runlevel>

원천:https://wiki.gentoo.org/wiki/OpenRC_to_systemd_Cheatsheet

관련 정보