해결하다이 문제, tmux를 다시 시작하지 않고 gnome을 다시 시작할 때마다 모든 쉘에 대한 환경 변수를 설정해야 합니다 DBUS_SESSION_BUS_ADDRESS
(매우 일반적임). tmux
이 문제를 어떻게 가장 잘 해결할 수 있습니까?
- 난 깔끔하게 못 해다른 프로세스의 환경 변경.
- 나는 할 수 없다각 창에 명령 보내기
- 내 에서 gnome 애플리케이션을 실행할 수 있습니다.
PROMPT_COMMAND
이는 를 눌러야 함을 의미합니다 . Enter이것은 추악하고 과잉입니다. - 환경 변수를 다음과 같이 설정할 수 있습니다.각 명령 전에 명령을 실행하십시오., 하지만 그건 좀 많은 것 같아요.
이 문제를 더 깔끔하게 해결할 수 있는 다른 방법이 있나요?
답변1
dbus-launch
이 특별한 경우에는 Gnome을 실행하여 임의의 D-Bus 주소를 생성하는 대신 dbus-daemon
X 세션 초기에 명시적으로 시작하고 고정 주소(예: unix:path=~/.dbus-$HOSTNAME-$DISPLAY
.
에 있는 정보를 고려하면오류 보고서, 당신은 그것을 멀리 unset DBUS_SESSION_BUS_ADDRESS
하고 응용 프로그램이 루트 창 속성에서 버스 주소를 알아내도록 할 수도 있습니다.
일반적인 경우 귀하의 평가는 정확합니다. ptrace
현재 가지고 있는 것은 (Apparmor 또는 SELinux와 같은 보안 프레임워크로 인해 프로그램이 충돌하거나 작동하지 않을 수 있음) 또는 셸 명령 삽입(Windows에서만 형식이 유효함)과 같은 신뢰할 수 없는 방법뿐입니다. 쉘 프롬프트에서). 모든 쉘 프롬프트( zsh preexec
또는 bash 사용)에서 명령을 실행하면 PROMPT_COMMAND
최소한 문제가 발생할 위험이 없습니다.
또 다른 솔루션은 호출을 LD_PRELOAD
가로채는 라이브러리입니다 getenv
. 과한 느낌도 듭니다.
가장 좋은 옵션은 간접 수준을 생성하여 애플리케이션이 작업을 수행하도록 하는 것입니다. 즉, 환경 변수의 값이 유효한 상태로 유지되도록 정렬하고 애플리케이션이 이를 컨텍스트 인식 방식으로 해석하도록 하는 것입니다. 애플리케이션이 루트 창 속성에서 D-Bus 주소를 조회하도록 하는 것이 이 접근 방식의 한 예입니다.