X-Windows 및 DBus에 대한 액세스가 필요한 서비스를 설정하려고 합니다. 처음에는 백그라운드 앱으로 만들어 보았지만 작동하지 않았습니다. "자동 로그인 사용자" 기능을 사용합니다. 이제 자동 로그인 사용자(예 alexis
: )로 서비스를 실행해야 한다고 생각합니다. 내 문제는 해당 사용자로 실행되는 서비스(예: 설정 User=alexis
및 Group=alexis
변수) 를 쉽게 만들 수 있다는 것입니다. 환경변수( DISPLAY=:0
)도 추가해야 했습니다. 그러나 서비스는 여전히 시스템 서비스로 시작됩니다.
내 아이디어는 사용자가 로그인할 때 시작되는 방식으로 서비스를 만드는 것입니다. 실행하면 많은 systemd 항목이 표시됩니다.
systemctl --user list-units
그러나 이러한 서비스 파일을 생성하고 전체 OS가 아닌 사용자를 위한 서비스를 생성하기 위해 Ubuntu 패키지 생성 도구 체인을 얻는 방법을 잘 모르겠습니다.
프로젝트 폴더 my-daemon.service
에 남아 있는 현재 파일은 다음과 같습니다 .debian
# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html
[Unit]
Description=Daemon
[Service]
Type=simple
WorkingDirectory=~
ProtectHome=false
NoNewPrivileges=true
ExecStart=/usr/sbin/my-daemon
ExecStop=kill "$MAINPID"
Restart=on-failure
RestartSec=1min
User=alexis
Group=alexis
LimitNPROC=1000
[Install]
WantedBy=xsession.target
그래서 아래에 서비스 파일이 설치되는데 /lib/systemd/system
제 경우에는 잘못된 것 같습니다. 그렇지 않으면 예상대로 작동하는 것처럼 보이지만... 사용자별 단위가 올바르게 설정되었는지 실제로 100% 확신할 수 없습니다. 주변을 둘러봤지만 사용자 단위에 대한 정보를 많이 찾을 수 없습니다. 일급비밀사항인거같은데...
답변1
@ajgringo619 및 @meuh의 의견을 바탕으로 다음 솔루션을 사용하게 되었습니다.
my-daemon.service 파일을 수동으로 설치
my-daemon.service
프로젝트debian
디렉터리에서 다른 디렉터리(내가 사용하는 디렉터리)로 이동 했습니다conf
..install
서비스를 사용자 서비스로 설치하기 위해 내 프로젝트 파일에 줄을 추가했습니다.conf/my-daemon.service /usr/lib/systemd/user/.
이것도 보세요아치리눅스 페이지(링크 제공: @meuh)
서비스 활성화
설치를 실행할 때 해당 사용자에 대해 dbus가 실행되지 않기 때문에 이 작업을 수행할 수 없습니다
systemctl
(즉, 내 계정에서 설치하고 설치 패키지가 존재하지만 비활성인 "newuser"를 생성합니다). 그래서 서비스를 활성화하려면수동소프트 링크를 만듭니다.이를 위해서는 약간의 작업이 필요합니다. 먼저 폴더가 있는지 확인하고 소프트 링크를 만든 다음 사용자 소유권을 수정하세요.
mkdir -p /home/newuser/.config/systemd/user/default.target.wants ln -s /usr/lib/systemd/user/my-daemon.service /home/newuser/.config/systemd/user/default.target.wants/. chown -R newuser:newuser /home/newuser/.config/systemd
청소하다
(3)과 반대되는 방법을 원하시면 소프트링크를 제거하시고 해당 폴더를 삭제하셔야 합니다.
-f
이 옵션이 제거된 경우 해당 옵션을 사용하시고rmdir
에서 사용하시기 바랍니다--ignore-fail-on-non-empty
. 의 경우rmdir
가장 깊은 것부터 하나씩 삭제해야 설치 전과 비슷한 상태가 됩니다.자동으로 시작하시겠습니까?
(3)에서 생성된 링크가 자동으로 시작(활성화)되고, 컴퓨터를 다시 시작하거나 로그아웃했다가 다시 로그인하면 새 사용자와 장치가 자동으로 시작됩니다. 물론 이는 서비스가 제대로 작동한다는 가정 하에 이루어집니다. 당신의~ 고 싶어요올바르게 정의되었습니다.
[Install] WantedBy=default.target
사용자 서비스에서 작동하지 않는 다른 옵션이 있습니다. 예를 들어
User=...
또는 옵션을 지정할 수 없습니다Group=...
. 이러한 오류는 해당 저널에 나타날 것입니다journalctl --user -u my-daemon
중요: 이는
--user
매우 중요합니다. 이전에 서비스를 시스템 서비스로 실행한 경우--user
시스템 서비스의 로그는 볼 수 있지만 사용자 로그의 내용은 볼 수 없습니다.
또 다른 세부 사항은 창을 열어야 하고 창이 작동하려면 환경 변수를 추가해야 한다는 것입니다.
Environment="DISPLAY=:0"
장치 로그에 표시되는 오류를 기반으로 이러한 조정을 수행해야 합니다.