루트가 아닌 x 세션에 영향을 미치려면 루트로 스크립트를 실행하십시오.

루트가 아닌 x 세션에 영향을 미치려면 루트로 스크립트를 실행하십시오.

꽃밥에서 나는 달릴 수 있어요

DISPLAY=:0 notify-send hullo

그리고 내 충치 세션에서 이 메시지를 보세요. 하지만 루트로 로그인하면 작동하지 않습니다. ...도 아니다

USER=toothrot DISPLAY=:0 notify-send hullo

루트에서 작동하게 하려면 어떻게 해야 합니까?

내 x 세션에 영향을 미치는 udev 규칙을 만들고 싶기 때문에 이것이 필요합니다. 아치를 사용하십시오.

답변1

X는 두 가지 방법으로 클라이언트에 권한을 부여할 수 있습니다. 한 가지 방법은 쿠키를 사용하는 것입니다. 그런 다음 DISPLAY=:0및 를 설정해야 합니다 XAUTHORITY=/home/yourusername/.Xauthority.

귀하의 경우에는 xhost를 통해 완료되었다고 가정합니다. 그렇지 않으면 DISPLAY를 설정하는 것만으로는 충분하지 않습니다. xhost누가 승인되었는지 보려면 입력하세요 .

~/.Xauthority어쩌면 쿠키와 승인이 있을 수도 있습니다 xhost +SI:localuser:toothrot.

display:0 을 사용하여 루트 액세스를 허용할 수 있지만 DISPLAY=:0 xhost +SI:localuser:root이 작업은 일반 사용자로 수행해야 합니다. 쿠키를 사용하는 것이 더 나은 접근 방식입니다.

DISPLAY=:0 XAUTHORITY=/home/toothrot/.Xauthority notify-send hullo

사용자로서 알림 보내기를 수행하려면:

su toothrot -c 'DISPLAY=:0 XAUTHORITY=/home/toothrot/.Xauthority notify-send hullo'

답변2

아마도 당신은 오래 전에 문제를 해결했을 것입니다. 그러나 완성을 위해 일반적인 해결책은 다음과 같습니다.여기):

$ my_user="toothrot"
$ my_user_id=$(more /etc/passwd | awk -F: '/^'${my_user}':/ {print $3}')
$ sudo -u $my_user DISPLAY=':0' DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${my_user_id}/bus /usr/bin/notify-send "hullo"

여러 화면 세션이 표시되는 경우 마일리지가 다를 수 있습니다.디스플레이=":0"우려되는 점은 위의 사항입니다. 그러나 그것은 또 다른 기사입니다.

답변3

위의 답변은 약간 조잡하며 여러 사용자 또는 여러 모니터에서 제대로 작동하지 않습니다. 사용자가 ~/.Xauthority보호된 파일에 심볼릭 링크를 걸면 권한 상승 공격이 발생할 수 있습니다. 또 다른 옵션은 udev완전히 잊어버리고 사용하는 것입니다.우데브, 자신의 X 세션에서 루트가 아닌 사용자로 실행됩니다. ~/.config/uudev.conf다음 내용이 포함된 파일을 설정하기만 하면 됩니다 .

* ACTION="bind", DRIVER="whatever", ...
notify-send hullo

또는 파일 systemctl --user restart uudev에서 실행 하는 경우 설정된 적절한 변수로만 실행됩니다 .~/.xsession~/.xinitrcnotify-sendDISPLAYXAUTHORITY

관련 정보