crontab에서 dbus 프로그램을 실행할 때 SESSION ID를 어떻게 알 수 있나요?

crontab에서 dbus 프로그램을 실행할 때 SESSION ID를 어떻게 알 수 있나요?

crontab에서 일부 프로그램을 실행해야 하는데 프로그램이 dbus 세션 ID를 어떻게 알 수 있나요? 세션 관리자가 시작한 프로그램에서만 작동합니다.

답변1

문제는 다소 비슷합니다.VisitXShow그리고X 쿠키 파일의 위치 찾기. (또한 사용자의 모니터에서 GUI 프로그램을 실행하고 싶다면 이 질문을 참조하세요.)

Dbus는 세션 주소를 에 저장합니다 ~/.dbus/session-bus. 파일 이름은 $machine_id-$display_number$machine_id저장된 무작위로 생성된 숫자 /var/lib/dbus/machine-id이고 $display_number는 X 표시 번호( $DISPLAY또는 :$display_number) 입니다 :$display_number.$screen_number. 의 파일은 ~/.dbus/session-bus셸에서 구문 분석할 수 있으며 DBUS_SESSION_BUS_ADDRESS및 에 대한 정의를 포함합니다 DBUS_SESSION_BUS_PID.

dbus_session_file=~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-0
if [ -e "$dbus_session_file" ]; then
  . "$dbus_session_file"
  export DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID
  dbus-send …
fi

dbus 데몬을 계속 사용할 수 있다는 보장은 없습니다. 사용자가 로그아웃했을 수 있습니다.

또 다른 방법은 데스크톱 세션에서 프로세스의 PID를 조회하고 해당 환경에서 dbus 주소를 얻는 것입니다.

export $(</proc/$pid/environ tr \\0 \\n | grep -E '^DBUS_SESSION_BUS_ADDRESS=')

crontab이 루트로 실행 중이고 콘솔에 로그인한 사용자의 세션과 통신하려면 다음을 참조하세요.다른 사용자의 데스크탑에서 루트로 그래픽 프로그램을 시작할 수 있습니까?

답변2

댓글을 달 수가 없어요빈센조의 대답, 그러나 나는 그의 대답이 KDE4에서 나에게 가장 적합하다는 것을 알았습니다.

하지만 명령을 약간 수정해야 했습니다. 나에게는 다음과 같다:

ps -u yourlogin e | grep -Eo 'dbus-daemon.*ADDRESS=unix:abstract=/tmp/dbus-[A-Za-z0-9]{10}' | tail -c35

공지사항은 ADDRESS대문자로 되어 있습니다.

답변3

그놈 세션 관리자의 pid를 알면 /proc파일 시스템에서 환경을 읽을 수 있다고 생각합니다.

GNOME_SESSION_PID=<PID_OF_GNOME_SESSION> 
READ_SESSION_COOKIE="$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$GNOME_SESSION_PID/environ|cut -d= -f2-)"

그런 다음 알림 전송 또는 dbus* 도구와 같은 다른 프로그램에서 SESSION ID를 사용하십시오.

건배.

답변4

예, DBus에는 ax 세션이 있어야 합니다. 이전 답변과 마찬가지로 "DBUS_SESSION_BUS_ADDRESS"에는 시작하기 전에 값이 있어야 합니다. 그러나 "dbus-launch"를 사용하여 이 값을 생성할 수 있습니다. 다음 코드 조각은 crontab에서 호출되는 스크립트에 배치될 수 있습니다.

if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
  eval `dbus-launch --sh-syntax`
fi
echo "D-Bus daemon address is:"
echo "$DBUS_SESSION_BUS_ADDRESS"

# -E to export DBUS_SESSION_BUS_ADDRESS. Crucial to make DBUS work.
sudo -u <user> -E <program> 

이 솔루션의 한 가지 단점은 소프트웨어를 중지한 후 세션이 중단될 수 있다는 것입니다.

관련 정보