FreeBSD 8.2를 사용합니다. vnc를 통해 내 컴퓨터에 액세스하기 위해 ightvnc를 사용하고 있습니다. 저는 일반 사용자로 로그인했습니다. 그것은 중요하지 않습니다. X 응용 프로그램을 열 수 있고 제대로 표시됩니다. 그런 다음 루트를 고소했는데 열 수 없었습니다. 예전에는 xhost +localhost를 수행할 수 있었지만 더 이상 작동하지 않습니다. .Xauthority 복사에 대해 온라인에서 읽었으므로 이제 루트의 .cshrc에서 다음을 수행합니다.
if ($user != "root") then
setenv XAUTHORITY /home/$user/.Xauthoriy
endif
이로 인해 한 단계 더 발전했지만 이제 오류가 발생합니다.
GLib-GIO:ERROR:gdbusconnection.c:2270:initable_init: assertion failed ..
인터넷에서 이것을 검색했는데 누군가 명령 앞에 dbus-launch를 붙이라고 했습니다.
dbus-launch emacs
나는 이것을 시도했고 작동하지만 투박해 보입니다. 원활한 루트를 사용한 후 X 기반 프로그램을 시작할 수 있도록 하려면 어떻게 해야 합니까(FreeBSD 6.x에서와 마찬가지로)?
답변1
이에 대한 해결책이 있습니다. 이 웹사이트에는 설명이 잘 되어 있습니다https://bugs.launchpad.net/ubuntu/+source/gconf/+bug/336660:
문제의 설명은 다음과 같습니다.
다른 사용자로 로그인한 터미널에서 루트로 su하면 새로운 "su-ed" 사용자는 상위 쉘 사용자로부터 환경 변수를 상속받습니다.
예: 사용자 jack에 대해 DBUS_SESSION_BUS_ADDRESS 환경 변수가 "unix:abstract=/tmp/dbus-l5SiTFzmR8,guid=1af28c9d83400a896ef6268d4a7af59f"로 설정되었다고 가정합니다. 이제 터미널을 jack으로 열고 su를 사용하여 루팅하는 경우 DBUS_SESSION_BUS_ADDRESS 변수는 그대로 유지되어야 합니다. 사용자 삽입 구멍으로. 그게 문제입니다. 바로 이 특별한 환경입니다. 변수(DBUS_SESSION_BUS_ADDRESS)로 인해 문제가 발생합니다. gedit, nautilus와 같은 그놈 프로그램. . . dbus 프로토콜뿐만 아니라 애플리케이션 특정 구성을 저장하는 gconf와 통신하려면 dbus 프로토콜을 사용하십시오. 예를 들어, 루트로 실행된 프로그램은 사용자 jack으로 실행된 프로그램과 다른 D-Bus 세션 버스 주소를 사용합니다. 따라서 문제는 루트로 전환했지만 DBUS_SESSION_BUS_ADDRESS 변수가 여전히 jack의 dbus 세션 버스 주소를 가리킨다는 것입니다.
해결책: 루트 사용자는 별도의 dbus 세션 주소(/root/.dbus/session-bus/...)도 가지고 있으므로 터미널에 있고 루트에 "su-ed"할 때 루트의 dbus 주소를 사용하십시오. 단순히 DBUS_SESSION_BUS_ADDRESS 변수를 지웁니다. 예:export DBUS_SESSION_BUS_ADDRESS="" gconf와의 dbus 통신이 필요한 프로그램은 이 환경 변수를 확인하고 비어 있으면 사용자 ~/.dbus/session-bus/ 디렉터리(올바른 위치)에서 dbus 주소를 읽습니다. 이를 영구적으로 만들려면 루트 사용자의 .bashrc 파일에 다음 행을 추가하십시오: import DBUS_SESSION_BUS_ADDRESS="" 이는 루트로 su할 때마다 터미널이 로그인 쉘이 아니라는 의미입니다(이는 jack으로 로그인한 경우입니다). ) 터미널을 열고 su를 실행합니다. DBUS_SESSION_BUS_ADDRESS 변수가 지워져 애플리케이션이 올바른 위치에서 dbus 주소를 읽습니다.
그런데 새 dbus 세션을 시작하기 위해 dbus-launch를 사용할 필요는 없습니다. 이렇게 하고 애플리케이션이 여전히 잘못된 위치에서 dbus 주소를 읽는 경우에도 문제는 여전히 존재합니다.
DBUS_SESSION_BUS_ADDRESS를 설정 해제하면 이제 소송 후 X에서 emacs를 시작할 수 있습니다. 하지만 여전히 경고가 표시됩니다.
(emacs 1879): GLib-WARNING **: In call to g_spawn_sync()...