혼동하지 마세요실제 모니터(귀하의 모니터), X11 서버("모니터")및 액세스 방법소켓 또는 다른 수단:DISPLAY=:0 및 DISPLAY=localhost:10 ssh를 통해 전달되면 동일한 모니터/xserver, 동일한 그래픽 카드 및 동일한 모니터를 참조합니다.
$DISPLAY
X 서버 시작을 제공합니다. $DISPLAY
X 서버의 청취 소켓과 렌더링 대상을 모두 지정 합니까 ? 그렇다면 두 가지 다른 유형의 항목을 어떻게 지정합니까?
$DISPLAY
소켓을 지정합니다. 예를 들어$DISPLAY
is 인 경우:40
포트 6040 또는 40의 이름을 딴 Unix 도메인 소켓에 해당합니다.$DISPLAY
수신 대기할 X 서버를 지정하는 소켓입니까?$DISPLAY
렌더링 대상(예: X 서버가 무언가를 렌더링할 디스플레이 장치 또는 에뮬레이터) 도 지정해야 합니까 ?
이 올바른지
X client <-> X server <-> rendering target
X 클라이언트는 렌더 타겟과 직접 통신할 수 없지만 X 서버를 통해 간접적으로 통신할 수 있습니까?
감사해요.
답변1
디스플레이에 AX 서버가 시작된다고 하네요
아니요. X 서버는 X 클라이언트에 대한 통신 끝점을 제공합니다. X 클라이언트는 명령줄 옵션이나 환경 변수를 통해 통신하려는 서버를 선택합니다. 클라이언트의 관점에서 보면 이것이 바로 "display"를 사용하므로 옵션은 일반적으로 이고 -display
, 환경 변수는 이며 $DISPLAY
, 관련 라이브러리 함수의 이름에는 "display"가 있습니다.
통신은 네트워크(현재 안전하지 않고 대부분 비활성화되어 있음)를 통해 또는 로컬로 이루어질 수 있습니다. 두 끝점을 모두 제공하는 데 사용되는 unix 구성을 "소켓"이라고 합니다(참조:man 2 socket
). "display" 값은 (1) 호스트, (2) 잘 알려진 포트 번호 또는 UNIX 도메인 경로(로컬 통신용)에 매핑된 디스플레이 번호, (3) 화면 번호(현재 대부분 기본값 0
이며 대부분의 경우)를 인코딩합니다. X 서버는 다중 화면을 제공하지 않습니다) 형식으로 hostname_or_address:display_number.screen_number
.
많은 클라이언트가 단일 서버에서 제공하는 동일한 "소켓"에 연결할 수 있으므로
X 서버가 표시하는 "소켓"(첫 번째 문장)과 X 서버가 생성하고 X 클라이언트에 연결된 "소켓"(두 번째 문장)이 동일한 "소켓"인지 여부를 지정합니다.
무의미한.
편집하다
이 올바른지
X client <-> X server <-> rendering target
X 클라이언트는 렌더 타겟과 직접 통신할 수 없지만 X 서버를 통해 간접적으로 통신할 수 있습니까?
"렌더링 대상" "모니터에 그래픽으로 표시될 수 있는 일부 하드웨어"를 의미한다고 가정하면 기본적으로 맞습니다.
그러나 X 서버는 "렌더링 대상"과 어떤 방식으로든 통신하지 않습니다. 프레임 버퍼는 모니터에 표시되고 모든 모니터는 다양한 드라이버 및 커널 계층을 통해 추상화됩니다.
또한 원래 X 프로토콜의 경우도 마찬가지였습니다. OpenGL 확장의 출현으로 X 클라이언트는 X 프로토콜에 대한 확장을 사용하여 X 서버를 우회하고 "렌더링 대상"(GPU의 커널 드라이버)에 보다 직접적으로 액세스할 수 있습니다. 요즘 대부분의 응용 프로그램은 OpenGL을 사용하여 그래픽을 가속화합니다. X 클라이언트가 네트워크를 통해 다른 컴퓨터의 X 서버에 연결되면 하드웨어 가속이 손실되는 이유입니다.