로그인 세션 전체에서 D-Bus 세션 재사용

로그인 세션 전체에서 D-Bus 세션 재사용

여러 로그인 세션을 통해 컴퓨터에 액세스합니다. 세션 수명주기는 겹칠 수도 있고 겹칠 수도 없습니다. 내 경우 이러한 로그인 세션은 현재 항상 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-launchD-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

이 옵션이 없으면 --autolaunchX Windows 연결이 필요하지 않다고 생각합니다.

관련 정보