"로그인" 수준에서 실행되도록 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 서비스 또는 데스크탑 환경의 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

관련 정보