Skip to content

Xhost

X는 기본적으로는 X 서버와 같은 단말기에서 동작하는 X 애플리케이션 표시만을 허가한다. 다른 단말기에서의 접속을 허가하려면 xhost를 이용한다.

현재 호스트 시스템에서 Enhanced X-Windows에 액세스하는 사람을 제어합니다.

Usage

xhost [  + |  - ] [ Name ]

Description

xhost 명령은 X 서버가 연결을 허용하는 시스템 목록에 호스트 이름을 추가하거나 삭제합니다.

이 명령은 디스플레이 연결이 있는 시스템에서 실행되어야 합니다. -Host 매개변수를 사용하여 액세스 목록에서 이름을 제거할 수 있습니다. 액세스 목록에서 현재 이름을 제거하지 마십시오. 그렇다면 수정하기 전에 시스템에서 로그오프하십시오.

변수 없이 xhost 명령을 입력하면 X 서버에 액세스할 수 있는 현재 호스트 이름과 액세스 활성화 여부를 나타내는 메시지가 표시됩니다.

보안을 위해 액세스 제어에 영향을 미치는 옵션은 제어 호스트에서만 실행할 수 있습니다. 워크스테이션의 경우 이는 서버와 동일한 시스템입니다. X 터미널의 경우 로그인 호스트입니다.

기본 원격 이름을 활성화하려면 /etc/X?.hosts 파일에 이름을 정의하면 됩니다. 여기에서 ?는 액세스를 활성화 하려는 디스플레이 번호입니다.

예를 들어, jeanne:0 디스플레이는 jeanne이라는 기본 호스트 이름을 사용하는 시스템의 /etc/X0.hosts 파일에 정의된 시스템에서 액세스할 수 있습니다. 표시 이름과 파일 이름 모두에서 0은 정의된 원격 시스템이 향상된 X-Windows를 통해 액세스할 수 있는 표시 번호를 나타냅니다.

Flags

+Name
X 서버 액세스 목록에 추가할 호스트 이름(더하기 기호는 선택 사항)을 정의합니다.
-Name
X 서버 액세스 목록에서 제거할 호스트 이름을 정의합니다.
기존 연결은 끊어지지 않지만 새로운 연결 시도는 거부됩니다. 현재 시스템을 제거할 수 있습니다. 그러나 추가 연결(다시 추가하려는 시도 포함)은 허용되지 않습니다.
로컬 연결을 다시 허용하는 유일한 방법은 서버 리셋 입니다. (이로 인해 모든 연결이 끊어집니다.)
+
액세스가 무제한임을 지정합니다. Access control is turned off.
-
Turns access control on.

Namefamily:name 포맷을 사용한다:

  • inet - Internet host
  • local - Contains only one name, the empty string

NOTE

"family" 는 대소문자를 구분한다. "name"의 포맷은 "family"에 따라 다릅니다.

통신 소켓 위치

유닉스 계열의 경우: /tmp/.X11-unix

Examples

로컬 유저 접속 가능하게

잘 모르겠고 X 서버에 접근 가능하게 하고싶다면:

xhost +

접속 가능 서버 명시

다음 예시는 192.168.11.12의 X 애플리케이션을 자신이 이용하는 X 서버에 표시한다.

xhost +192.168.11.12

xeyes로 제대로 실행이 되는지 확인할 수 있다.

Display syntax

X 서버를 지정하는 형식은 다음과 같다.

-display {X서버명}:{디스플레이번호}.{스크린번호}
  • X서버명: IP주소나 이름 분석(name resolution)이 가능한 호스트 이름이다.
  • 디스플레이번호: X 세션의 번호로, -display에서는 필수 지정 항목이다.
  • 스크린번호: X 서버가 이용하는 디스플레이 확인을 위한 것이다. 이를 생략할 경우 기본값은 0이다.

xhost를 사용해 접속을 허가할 X 클라이언트 실행 호스트만을 추가하는 것이라면 +는 생략하고 IP주소만 지정해도 된다. 단, +만 적고 대상 IP주소를 지정하지 않는 경우 TCP/IP로 접속 가능한 모든 호스트가 X 서버에 액세스할 수 있게 되므로 주의해야한다.

그리고 사용자명으로도 지정할 수 있다. 다음은 localhost의 사용자 rino의 접속을 허가하는 예제이다.

xhost +si:localuser:rino

현재 액세스 제어 상태 확인

옵션 없이 xhost을 실행하면 된다.

그럼 다음과 같이 출력된다:

$ xhost
access control enabled, only authorized clients can connect
SI:localuser:yourname

Docker 에서 실행

먼저 host 머신에서 docker 이름의 사용자가 실행하는 모든 프로그램을 X윈도우에 접근 가능하도록 권한을 설정합니다:

xhost +local:docker

DISPLAY 환경 변수 확인:

echo $DISPLAY

Docker 실행:

docker run --rm -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY ubuntu

그리고 게스트(컨테이너 내부)에서:

apt update
apt install x11-apps
xeyes

## 또는 OpenGL 테스트를 하고싶다면:
apt update
apt install mesa-utils
glxgears

X윈도우 접근 권한을 원상복구하려면:

xhost -local:docker

docker user 외에도 아래처럼 X windows를 로그인한 user로 설정해도 된다.

xhost +local:$USER

...

xhost -local:$USER

See also

Favorite site