Arch Linux 설치에서 bspwm을 사용하고 있으며 응용 프로그램을 시작하려면 sxhkd 핫키 데몬을 실행해야합니다.
지금까지 시작 스크립트는 내 .config / bspwm / bspwmrc (간단한 bash 스크립트 파일)에있었습니다.
# Keyboard bindings manager
pkill sxhkd
sxhkd -m 1&
-m 1
나는 쿼티 키보드가 없기 때문에 논쟁이있다.
bspwmrc 스크립트는 자동 로그인시 디스플레이 관리자 인 LightDM에 의해 실행됩니다. 지금까지는 훌륭합니다.
Arch Wiki를 읽고 Systemd로 sxhkd를 직접 시작할 수 있다는 것을 깨달았습니다. 샘플 서비스 파일에 대한 링크 도 있습니다. 포함하는:
[Unit]
Description=Simple X Hotkey Daemon
Documentation=man:sxhkd(1)
BindsTo=display-manager.service
After=display-manager.service
[Service]
ExecStart=/usr/bin/sxhkd
ExecReload=/usr/bin/kill -SIGUSR1 $MAINPID
[Install]
WantedBy=graphical.target
그래서 궁금했습니다. 그리고 sxhkd.service 파일을 /etc/systemd/system
(-m 1 인수를 추가 한 후)에 복사하고를 사용하여 서비스를 활성화 sudo systemctl enable sxhkd
하고 bspwmrc 스크립트의 줄에 주석을 달고 다시 시작했습니다.
아아, 그것은 작동하지 않습니다. 를 입력 할 때 systemctl status sxhkd
다음 오류 메시지가 표시됩니다.
Warning: The unit file, source configuration file or drop-ins of sxhkd.service changed on disk. Run 'systemctl daemon-rel>
● sxhkd.service - Simple X Hotkey Daemon
Loaded: loaded (/etc/systemd/system/sxhkd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2020-07-24 10:29:05 CEST; 14min ago
Docs: man:sxhkd(1)
Main PID: 662 (code=exited, status=1/FAILURE)
Jul 24 10:29:05 Solgaleo systemd[1]: Started Simple X Hotkey Daemon.
Jul 24 10:29:05 Solgaleo sxhkd[662]: Can't open display.
Jul 24 10:29:05 Solgaleo systemd[1]: sxhkd.service: Main process exited, code=exited, status=1/FAILURE
Jul 24 10:29:05 Solgaleo systemd[1]: sxhkd.service: Failed with result 'exit-code'.
내 이해는 Can't open display
sxhkd가 너무 일찍 시작 된다는 것을 의미하며 ... 이유 또는 수정 방법을 모르겠습니다.
이전 구성으로 돌아갈 수 있다는 것을 알고 있지만 아치 위키에 작동하지 않는 것이있는 경우 내 잘못인지 또는 위키를 업데이트해야하는지 확인하고 싶습니다.
편집 :
추가 조사에 따르면 sxhkd를 루트로 실행할 수 없습니다.
내가 변경 한 내용은 다음과 같습니다.
나는에서 sxhkd.service 파일을 이동 /etc/systemd/system
로 /etc/systemd/user
와를 통해 그것을 활성화 systemctl --user enable sxhkd
명령.
여전히 작동하지 않지만 다른 오류 메시지가 표시됩니다.
Failed to start sxhkd.service: Unit display-manager.service not found.
입력 systemctl status display-manager
하면 다음이 제공됩니다.
● lightdm.service - Light Display Manager
Loaded: loaded (/usr/lib/systemd/system/lightdm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-07-25 11:11:07 CEST; 10min ago
Docs: man:lightdm(1)
Main PID: 602 (lightdm)
Tasks: 4 (limit: 38412)
Memory: 63.7M
CGroup: /system.slice/lightdm.service
├─602 /usr/bin/lightdm
└─666 /usr/lib/Xorg -bs -core :0 -seat seat0 -auth /run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
Jul 25 11:11:05 Solgaleo systemd[1]: Starting Light Display Manager...
Jul 25 11:11:07 Solgaleo lightdm[602]: Error getting user list from org.freedesktop.Accounts: GDBus.Error:org.freedesktop>
Jul 25 11:11:07 Solgaleo systemd[1]: Started Light Display Manager.
Jul 25 11:11:08 Solgaleo lightdm[670]: pam_succeed_if(lightdm-autologin:auth): requirement "user ingroup autologin" was m>
Jul 25 11:11:08 Solgaleo lightdm[670]: Error getting user list from org.freedesktop.Accounts: GDBus.Error:org.freedesktop>
Jul 25 11:11:08 Solgaleo lightdm[670]: pam_unix(lightdm-autologin:session): session opened for user ben by (uid=0)
lines 1-17/17 (END)
이는 디스플레이 관리자가 제대로 실행되고 있음을 의미합니다. 로 시작된 서비스에서 볼 수 없을 수도 있습니다 --user
.
편집 2 :
BindsTo
과는 After
실제로 필요하지 않습니다 : 서비스는 사용자 세션이 시작되었습니다 그래서 후에, 사용자로 시작됩니다. 그러나 제거하면 시작시 서비스가 전혀 시작되지 않습니다. 그래도 수동으로 시작하면 잘 작동합니다.
편집 3 :
내가 수행 한 단계에 대한 자세한 내용 : https://bbs.archlinux.org/viewtopic.php?id=257626&p=2
당신이 설명하는 접근 방식은 불가능하거나 적어도 내가 아는 바가 아닙니다. 다음과 같은 반례를 고려하십시오. 다중 헤드 설정이있는 경우 두 번 로그인합니다. 바로 systemd
가기 키 데몬의 복사본 하나를 시작합니다. 이제 시스템의 두 사용자 중 한 명이 핫키를 누릅니다. 누가 화면에 결과를 얻습니까? ;)
따라서 가장 좋은 방법은 세션이 핫키 데몬을 시작하도록하는 것입니다. 간단한 방법은 이전에했던 것처럼 창 관리자의 시작 스크립트를 사용하는 것입니다. 보다 현대적인 방법은 일종의 사용자 세션이 이것을 관리하는 것입니다. 이것은 실제로 시스템과 창 관리자의 설정에 따라 다릅니다. 내 경험상 이것은 항상 약간의 히트 또는 미스이며 잘 문서화되지 않은 반면 시작 스크립트는 매우 간단합니다.
dbus 서비스 파일을 작성하는 방법의 한 예는 https://serverfault.com/a/906224/107282에서 볼 수 있습니다 . 언급 한 데몬에는 dbus가 필요하지 않지만 구성된 DISPLAY
변수 를 사용하여 적절한 시간에 시작할 수 있어야 합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다