1

1

저는 사용자를 추방하고 공용 실험실에서 사람들이 화면을 잠그는 것을 방지하기 위해 Gnome 세션이 사용자에 의해 "잠겨" 있는지 여부와 시기를 감지하는 스크립트를 작업 중입니다. 그러나 이를 수행하는 유일한 방법은 다음과 같이 dbus-monitor를 시작하는 것입니다.

dbus-monitor --session \ "type=signal,interface=org.gnome.ScreenSaver"

불행히도 아무리 많은 노력을 해도 루트로 작동하도록 할 수 없습니다. 나는 다음을 시도했습니다 :

1

eval `dbus-launch`
dbus-monitor --session ...

동일한 오류로 인해 실행되지 않습니다.

2

export $(dbus-launch)
dbus-monitor --session ...

실행되지만 메시지를 성공적으로 모니터링하지 못합니다.

eval `dbus-launch`
export DBUS_SESSION_BUS_ADDRESS
dbus-monitor --session ...

실행되지만 메시지를 모니터링하지는 않습니다.

X11 세션 오류가 발생할 때의 정확한 오류는 다음과 같습니다.

Failed to open connection to session message bus: dbus-launch failed to autolaunch D-Bus session: Fd 4 did not have the close-on-exec flag set!  Setting the flag.
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified

Autolaunch error: X11 initialization failed.

간단히 말해서, org.gnome.ScreenSaver dbus 세션 메시지를 원격으로 모니터링할 수 있어야 하는데(새 사용자를 설정하는 것이 어려울 수 있으므로 이상적으로는 루트로서) 이를 수행하는 방법을 알 수 없습니다. 또한 사용자로 로그인하면 아무런 문제 없이 dbus-monitor 명령을 자체적으로 실행할 수 있다는 점도 추가해야 합니다(예상대로 기록됩니다).

상처를 입을 수 없기 때문에 더 많은 정보를 얻으십시오.

커널: RHEL5

 2.6.18-406.el5

DBUS 버전:

D-Bus Message Bus Launcher 1.1.2

그놈 버전:

2.16.0

답변1

문제는 dbus-monitor가 다른 사용자/세션(루트)으로 실행 중이므로 어디에 연결해야 할지 모른다는 것입니다. 다음과 같이 환경에서 DBUS ADDRESS를 얻을 수 있습니다.

DBUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pidof -s gnome-session)/environ)
dbus-monitor --address "$DBUS_ADDRESS"  "type=signal,interface=org.gnome.ScreenSaver"

이러한 명령은 를 사용하여 실행 중인 프로세스를 찾은 pidof -s gnome-session다음 DBUS_SESSION_BUS_ADDRESS에 대한 환경 및 grep을 살펴보고 이를 DBUS_ADDRESS에 할당한 다음 변수를 사용하여 dbus-monitor에 모니터링할 메시지 버스를 알려줍니다.

여러 세션이 있는 경우 "첫 번째"에서만 작동한다는 점을 명심하세요.

관련 정보