xhost 명령에 대해서

xhost 명령은 X서버가 호스트 접근 제어를 하기 위해 사용하는 명령어입니다.


X 윈도우에서 xterm과 같은 X응용프로그램은 X 서버에게 자신을 표현해 줄 디스플레이를 요청합니다.

이러한 요청에 대해 허용할지 말지를 호스트 단위로 제어할 수 있습니다.


유닉스/리눅스의 콘솔 X 서버는 기본적으로 호스트 접근 제어를 하고 있고 로컬의 연결에 대해서만 허용하고 있습니다.

그래픽 상태로 구동 중인 어떤 서버 A의 IP 주소가 192.168.1.100이라면, 네트워크 연결이 가능한 상태인 또 다른 서버 B에서 다음과 같은 명령을 실행하여 봅니다.

$ xclock -display 192.168.1.100:0&

이 명령은 B 서버의 xclock 프로그램을 A 서버로 띄우겠다는 의미입니다.

다음과 같은 에러 메시지가 나온다면 A 서버는 호스트 접근 제어를 하고 있는 상태입니다.

Xlib: connection to "192.168.1.251:0.0" refused by server
Xlib: No protocol specified

Error: Can't open display: 192.168.1.251:0

xhost + 의 의미

X 서버가 모든 호스트에 대해 그래픽 요청을 허용하겠다는 의미입니다. 이 말은 호스트 접근 제어를 하지 않겠다(disable)는 의미이기도 합니다.
$ xhost +
access control disabled, clients can connect from any host

위의 A 서버에서 xhost + 명령을 내린 후에 B 서버에 접속한 후 xclock을 띄우기 위해 동일함 명령을 내려 봅니다.

A 서버에 xclock 프로그램이 구동하는 것을 확인할 수 있습니다. 


반대로 xhost -는 모든 호스트에 대해 접근을 차단하겠다는 의미며, 호스트 접근 제어를 하겠다(enable)는 의미입니다. 이 경우라 하더라도 로컬의 프로그램에 대해서는 허용합니다.

xhost는 +나 - 뒤에 호스트 이름이나 IP 주소를 입력하여 해당 머신에 대해서만 접근 제어를 할 수 있습니다.

xhost + 192.168.1.101
xhost - 192.168.1.101

Xmanager도 호스트 접근 제어를 할 수 있습니다. 기본값으로 모든 호스트의 접근에 대해 허용합니다. 그러므로 모든 호스트는 Xmanager가 구동 중인 PC의 Xmanager에 그래픽 처리를 요청하여 구동될 수 있습니다.

따라서 Xmanager를 이용하여 원격의 유닉스/리눅스에 접속한 후 내린 xhost +는 무의미한 명령입니다. 이 명령은 접근 제어를 기본값으로 하고 있지 않는 Xmanager를 상대로 하는 명령이기 때문입니다.


Xmanager로 접속한 유닉스/리눅스의 터미널 프로그램에서 xhost 명령을 실행하면 다음과 같습니다.

$ xhost
access control disabled, clients can connect from any host
$ xhost -
access control enabled, only authorized clients can connect
$ xhost + 
access control disabled, clients can connect from any host
Xmanager에서 기본값으로 호스트 접근 제어를 하고자 할 경우 Xconfig 프로파일의 '보안' 탭에서 할 수 있습니다.