저는 여기에 게시된 작업을 기반으로 스크립트를 사용하고 있습니다.cron을 사용하여 pidgin 상태 업데이트
Wi-Fi 연결이 끊어지기 전에 자동으로 연결이 끊어지고 Wi-Fi가 다시 연결될 때 다시 연결되는 wicd 스크립트를 만들려고 합니다.
그러나 dbus/pidgin은 환경 변수가 설정된 경우에도 dbus 세션을 찾을 수 없는 것 같습니다.
내 설정:
- 아치리눅스
- 피진 2.9.0
- 리자 2.9.0-2
자동 로딩 스크립트(Xfce가 시작될 때 실행):
#!/bin/bash
touch /tmp/dbus_session_data
env | grep DBUS_SESSION_BUS_ADDRESS > /tmp/dbus_session_data
echo 'export DBUS_SESSION_BUS_ADDRESS' >> /tmp/dbus_session_data
스크립트 실행 후 tmp 파일:
[skaverat@eeepthought ~]$ cat /tmp/dbus_session_data
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-gZMqzhdS2S,guid=9b8b3169f14346902127832000000043
export DBUS_SESSION_BUS_ADDRESS
좋아요, 다른 환경으로 가보겠습니다.
[root@eeepthought ~]# env | grep DBUSD
[root@eeepthought ~]# source /tmp/dbus_session_data
[root@eeepthought ~]# env | grep DBUS
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-gZMqzhdS2S,guid=9b8b3169f14346902127832000000043
[root@eeepthought ~]# purple-remote getstatus
No existing libpurple instance detected.
보라색 - 일반 환경에서의 원격 통화:
[skaverat@eeepthought ~]$ purple-remote getstatus
available
무엇이 잘못될 수 있는지 아시나요?
답변1
DBus 세션은 다른 사용자 간에 공유될 수 없습니다. 이것이 설계된 방식입니다.
현재 솔루션을 얻지 못할 수도 있습니다. 루트를 사용하여 이 작업을 수행하려는 이유는 무엇입니까?
그렇다면 su - USERNAME -c /path/to/this/script.sh
다음과 같은 시작 스크립트를 사용하십시오.
#!/bin/bash
. ~/.dbus/session-bus/*
purple-remote getstatus
이는 루트 사용자에게 적용됩니다.
추신: pidgin을 통해 로그인한 사용자에게 cron을 설정하지 않는 이유는 무엇입니까?
답변2
내가 아는 한, 다른 사용자의 D-Bus 세션에 연결할 수 없습니다. 따라서 root@eeepthought는 다른 사용자로서 skaverat@eeepthought의 D-Bus 세션에 대한 연결이 거부됩니다. 그게 당신이 하고 있는 일의 전부입니다.