여러 로그인 세션을 통해 컴퓨터에 액세스합니다. 세션 수명주기는 겹칠 수도 있고 겹칠 수도 없습니다. 내 경우 이러한 로그인 세션은 현재 항상 SSH를 통해 이루어지지만 로컬 세션도 처리하는 것을 선호합니다.
가끔 이러한 세션에서 D-Bus가 필요하며 이러한 로그인 세션 간에 동일한 D-Bus 세션을 공유하고 싶습니다.GVFS를 사용하려면.
권장되는 접근 방식은 무엇입니까? 나는 내가 모르는 D-Bus의 사용법을 망치고 싶지 않습니다. 나는 사용을 고려했다
export $(dbus-launch --autolaunch $(cat /var/lib/dbus/machine-id))
그러나 (Ubuntu 12.04 기준) 이것은 옳지 않은 것 같습니다.
- 이를 위해서는 X 세션이 필요하지만 내 SSH 세션은 X 디스플레이를 전달할 수도 있고 전달하지 않을 수도 있으며 전달된 세션도 동일하지 않습니다
$DISPLAY
. - X 디스플레이를 사용할 수 없으면
dbus-launch
"자동 시작 오류: X11 초기화 실패" 메시지가 표시됩니다. 그리고 데몬 프로세스를 시작하지 마십시오. - 매뉴얼
dbus-launch
페이지에는 "이--autolaunch
옵션은 내부 구현 세부 사항으로 간주됩니다(...). 어쨌든 libdbus 구현 외부에서 사용할 실제 이유는 없습니다." 라고 나와 있습니다.
dbus-launch
D-Bus 제품군의 다른 도구는 실행 중인 항목 dbus-daemon
과 연결하는 항목을 자동으로 감지하는 기능을 지원합니까? D-Bus가 X 연결을 통해 시작되면 필요한 정보가 거기에 있지만 ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}
사용 가능한 X 연결이 없으면 어디에도 저장되지 않는 것 같습니다.
내 D-Bus 세션 파일을 함께 엮어야 합니까? 이렇게 하면 디렉토리에 있는 파일을 사용해야 합니까 ~/.dbus/session-bus
? 이 경로는 /var/lib/dbus/machine-id
안정적이고 이식 가능합니까?
답변1
DBus는 공유 dbus 데몬 설정을 약간 까다롭게 만듭니다.
내 설정의 경우 설정 dbus-launch --sh-syntax
은 .bash_rc
.
그러나 기존 DBus 데몬을 확인하는 것은 매우 간단합니다. 설정 파일이 $HOME/.dbus_settings에 있다고 가정합니다.
need_start=1
if [ -r "$HOME/.dbus_settings" ]
then
. "$HOME/.dbus_settings"
fi
if [ -n "$DBUS_SESSION_BUS_PID" ]
then
if kill -0 "$DBUS_SESSION_BUS_PID" 2>/dev/null
then
need_start=0 # Found one
fi
fi
if [ "$need_start" -ne 0 ]
then
dbus-launch --sh-syntax >"$HOME/.dbus_settings"
. "$HOME/.dbus_settings"
fi
이 옵션이 없으면 --autolaunch
X Windows 연결이 필요하지 않다고 생각합니다.