최근에 나는 이것을 xset b off
내 .bashrc에 넣었습니다. 이제 tty나 ssh(예: X 세션 외부)를 통해 로그인할 때 나타나는 오류 때문에 짜증이 납니다.
내 첫 번째 생각은 [[ -z "$SOME_VAR" ]] && xset b off
(음, 테스트 결과가 나왔습니다.변수가 설정되어 있고 비어 있습니다.다른 질문입니다.) 하지만 어떤 SOME_VAR이 맞나요?
그래서 X에 설정된 변수와 tty에서 누락된 변수를 확인하기 위해 set
tty의 출력을 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
:0
crontab
@reboot
참고: >= 4 >&
에만 사용할 수 있습니다 . bash
그렇지 않으면 사용> /dev/null 2>&1
답변2
DISPLAY
확인하는 것이 가장 좋은 방법이라고 생각합니다 .
- 원격 로그인(예: ssh -X)을 처리합니다.
- 전부는 아니지만 대부분의 플랫폼에서 작동합니다.
- 창 관리자/DE와 독립적입니다.
답변3
나는 보통 이 TERM
변수를 사용하여 스크립트에서 X를 테스트합니다.
TERM
일반적으로 linux
TTY 및 xterm
X 에 설정됩니다.
여기서는 GNU Screen 및 TMux와 같은 애플리케이션이 변수를 난독화하는 것처럼 보이기 때문에 "보통"이라는 단어를 사용합니다 TERM
.
답변4
일반 bash 스크립트에서:if [[ $DISPLAY ]]
동일한 머신에서 $DISPLAY
이는 터미널 에뮬레이터에 반환되지만 0:0
실제 터미널에는 아무것도 반환되지 않습니다. VS 로 쉽게 CtrlAltF1테스트 할 수 있습니다.CtrlAltF7
bash
기반으로 한 조건은 $DISPLAY
다음과 같습니다.
if [[ $DISPLAY ]]; then
…
fi
또는 :.profile
.personal
if xhost >& /dev/null
내 경험상 $DISPLAY
실행이나 확장시 설정되지 않았습니다. 이러한 상황의 경우,.profile
.personal
사용자 답변 cmevoli
최고의 서비스:
if xhost >& /dev/null; then
fi