%EC%97%90%EC%84%9C%20X%20%EC%84%B8%EC%85%98%20%EA%B0%90%EC%A7%80.png)
최근에 나는 xset b off
.bashrc에 넣었습니다. 이제 tty나 ssh를 통해, 즉 X 세션 외부에서 로그인할 때 나타나는 오류 때문에 짜증이 납니다.
내 마음 속에 가장 먼저 떠오른 것은 [[ -z "$SOME_VAR" ]] && xset b off
(글쎄, 알고 보니 그 테스트는변수가 설정되는 것과 비어 있는 것다른 질문입니다.) 하지만 어떤 SOME_VAR이 올바른가요?
그래서 어떤 변수가 X에 설정되어 있고 tty에서 누락되었는지 확인하기 위해 tty의 set
출력과 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
실제 터미널에서는 아무것도 반환되지 않습니다. 이는 CtrlAltF1vs. 를 사용하여 쉽게 테스트할 수 있습니다 CtrlAltF7.
bash
기반 조건은 다음 $DISPLAY
과 같습니다.
if [[ $DISPLAY ]]; then
…
fi
또는 :.profile
.personal
if xhost >& /dev/null
내 경험에 따르면 , 또는 확장하여 실행될 $DISPLAY
시기가 아직 설정되지 않았습니다 . 그러한 경우에는.profile
.personal
사용자가 답변 cmevoli
가장 좋은 서비스:
if xhost >& /dev/null; then
fi
데스크탑을 정의할 때 이 문제가 발생했습니다.CapsLock 키 매핑그것은 내 서버에 적용되어서는 안 됩니다.