X 서버가 실행되지 않는다고 생각하도록 프로그램을 속이는 방법


28

텍스트 사용자 인터페이스와 그래픽 사용자 인터페이스 모두에서 실행할 수있는이 프로그램이 있습니다.

하나 또는 다른 것을 강제하는 명령 줄 스위치가 없으므로 오히려 X에 있는지 여부를 자동 감지합니다 (예 : 가상 터미널에서 실행하면 텍스트 모드로 들어가고 실행하면 X 터미널 에뮬레이터는 별도의 그래픽 창을 엽니 다).

텍스트 모드로 강제 설정하고 X 터미널 내에서 실행하고 싶습니다. 어떻게해야합니까?

답변:


40

보통은

unset DISPLAY

터미널의 명령 줄에서. 일부 응용 프로그램은 그보다 더 똑똑하며 실제로 콘솔과 의사 터미널의 권한과 유형을 확인합니다.


7
불행히도, 정말 고집스러운 소프트웨어는 DISPLAY=:0설정이 해제되어 있다고 가정 합니다. 다른 사용자로 실행하고 iptables를 사용하여 루프백 X11을 삭제하면 문제를 해결할 수 있다고 생각합니다.
Kevin

2
@Kevin 아마도 DISPLAY=invalid:0?
sourcejedi

2
@PeterCordes 또는 env서브 쉘 대신 명령을 실행할 수 있습니다 .env -u DISPLAY emacs foo.c
pabouk

2
@PeterCordes emacs에는 X 사용을 비활성화하는 명령 줄 플래그가 있습니다 emacs -nw. 그냥 입력하십시오 . 그러나 그렇지 않은 경우 대신을 사용할 수 DISPLAY= emacs있습니다.
kasperd

2
DISPLAY=0.0.0.0:0이름 서버 조회를 수행하지 않고 즉시 실패합니다.
pts

31

단일 명령에 대해 X를 비활성화하려면 다음을 쓸 수 있습니다.

DISPLAY= ./my_command

이후 전략적 빈 공간에 주목하십시오 =. 보다 일반적으로, 명령 <variable>=<value>에 공백 으로 구분 된 시퀀스를 접두어로 추가하여 프로세스의 환경 변수를 설정할 수 있습니다. 공백은 분리 자로 사용되므로 =바로 뒤에 공백이 선행 변수를 지 웁니다. 서브 쉘을 명령으로 사용하고 환경을 인쇄하여 이러한 접 두부의 효과를 볼 수 있습니다. 예를 들어 보자.

$ A=a B=b C= D=d sh
$ echo $A $B $C $D

이것은 인쇄됩니다

a b d

이것은 서브 쉘의 환경이 실제로 의도 한 것과 다르다는 것을 보여준다. 개별 인수가에 전달되기 전에 쉘 대체가 발생 echo하므로 명령 행이 두 개의 공백 이있는 것처럼 출력 사이 b와 공백에 단일 공백 ​​만 있습니다.decho a b d

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.