Bash 스크립트(.bashrc 등)에서 X 세션 감지

Bash 스크립트(.bashrc 등)에서 X 세션 감지

최근에 나는 이것을 xset b off내 .bashrc에 넣었습니다. 이제 tty나 ssh(예: X 세션 외부)를 통해 로그인할 때 나타나는 오류 때문에 짜증이 납니다.

내 첫 번째 생각은 [[ -z "$SOME_VAR" ]] && xset b off(음, 테스트 결과가 나왔습니다.변수가 설정되어 있고 비어 있습니다.다른 질문입니다.) 하지만 어떤 SOME_VAR이 맞나요?

그래서 X에 설정된 변수와 tty에서 누락된 변수를 확인하기 위해 settty의 출력을 urxvt의 출력과 비교했습니다 . set예상한 대로 많은 차이점이 있습니다(나와 관련된 차이점만 나열됨).

  • DESKTOP_SESSION
  • DISPLAY
  • GDMSESSION
  • SESSION_MANAGER
  • WINDOWID
  • WINDOWPATH
  • XAUTHORITY
  • XDG_SESSION_COOKIE
  • XDG_CONFIG_DIRS
  • XDG_DATA_DIRS
  • XDG_MENU_PREFIX

세션 X에 있는지 테스트하는 가장 정확하고 일반적인 방법은 무엇입니까? 가능한 한 많은 배포판, 플랫폼 및 데스크탑 환경에서 실행될 수 있는 것입니까?

아니면 환경 변수를 테스트하는 것보다 더 좋은 방법이 있습니까?

답변1

디스플레이 서버가 사용 가능하고 유효한지 테스트하는 간단하고 효과적인 방법은 를 사용하는 것입니다 . 변수 가 유효하지 않은 값으로 설정될 수 있으므로 xhost항상 변수의 값을 검사할 수는 없습니다 .DISPLAY

if xhost >& /dev/null ; then echo "Display exists"
else echo "Display invalid" ; fi

crontab내가 이 작업을 수행하는 이유는 모니터가 있을 때는 모니터에서 실행되지만 모니터가 없을 때는 다르게 작동하는 여러 스크립트가 사용자에게 실행 중이기 때문입니다 . 내 상단에는 변수가 아직 존재하지 않더라도 으로 설정 crontab했습니다 . 로 시작하는 스크립트는 모니터 유무에 관계없이 시작됩니다 . 이를 통해 동일한 스크립트 내에서 디스플레이가 나타나고 사라지는 시기를 동적으로 감지할 수 있습니다.DISPLAY:0crontab@reboot

참고: >= 4 >&에만 사용할 수 있습니다 . bash그렇지 않으면 사용> /dev/null 2>&1

답변2

DISPLAY확인하는 것이 가장 좋은 방법이라고 생각합니다 .

  • 원격 로그인(예: ssh -X)을 처리합니다.
  • 전부는 아니지만 대부분의 플랫폼에서 작동합니다.
  • 창 관리자/DE와 독립적입니다.

답변3

나는 보통 이 TERM변수를 사용하여 스크립트에서 X를 테스트합니다.

TERM일반적으로 linuxTTY 및 xtermX 에 설정됩니다.
여기서는 GNU Screen 및 TMux와 같은 애플리케이션이 변수를 난독화하는 것처럼 보이기 때문에 "보통"이라는 단어를 사용합니다 TERM.

답변4

일반 bash 스크립트에서:if [[ $DISPLAY ]]

동일한 머신에서 $DISPLAY이는 터미널 에뮬레이터에 반환되지만 0:0실제 터미널에는 아무것도 반환되지 않습니다. VS 로 쉽게 CtrlAltF1테스트 할 수 있습니다.CtrlAltF7

bash기반으로 한 조건은 $DISPLAY다음과 같습니다.

if [[ $DISPLAY ]]; then 
fi

또는 :.profile.personalif xhost >& /dev/null

내 경험상 $DISPLAY실행이나 확장시 설정되지 않았습니다. 이러한 상황의 경우,.profile.personal사용자 답변 cmevoli최고의 서비스:

if xhost >& /dev/null; then
fi

데스크탑을 정의할 때 이런 문제가 발생했습니다.CapsLock 키 매핑내 서버에서는 작동하지 않습니다.

관련 정보