startx가 일관되지 않게 동작합니다.

startx가 일관되지 않게 동작합니다.

X 전달을 통해 바이너리 실행을 담당하는 SSH 서버가 있고 내 클라이언트 컴퓨터에는 다음의 바이너리를 dwm대체하는 쉘 스크립트가 있습니다 .dwm/usr/local/bindwm

ssh -q -tt [email protected] dwm $@

단 하나만 -t다음과 같은 오류가 발생합니다.

Pseudo-terminal will not be allocated because stdin is not a terminal

SSH 서버 측에서는 스크립트를 사용하여 다음과 같이 ForceCommand수신된 매개변수를 전달합니다 container_runner.

#!/bin/sh
/usr/local/bin/$SSH_ORIGINAL_COMMAND

그 이유는 ForceCommandDocker 컨테이너 초기화 스크립트 세트(위치 /usr/local/bin:

dwm다음은 Docker 이미지를 실행하는 스크립트 중 하나의 예입니다 .

#!/bin/sh
docker run \
    --pull=never \
    --rm \
    -v container-scripts:/container-scripts \
    -v ssh-keys:/home/dwm/.ssh \
    -v x11-shared:/tmp/.X11-unix \
    -it \
    -e DISPLAY=:1 \
    -e XAUTHORITY=/tmp/.X11-unix/container-cookie \
    dwm \
    $@ 2>/dev/null
  • container-scripts- 컨테이너 내에서 다른 형제 컨테이너를 실행할 수 있는 스크립트 세트가 포함된 볼륨
  • ssh-keys- 다른 컨테이너 내부에서 컨테이너를 실행할 수 있는 SSH 키
  • x11-shared- X11 공유 데이터(X11 소켓 및 xauth 쿠키)

ssh_config모습은 다음과 같습니다.

StrictHostKeyChecking no
UserKnownHostsFile /dev/null
ForwardX11 yes
ForwardX11Trusted yes
PreferredAuthentications=publickey

이전에 아래 설정으로 잘 작동했던 SSH 멀티플렉싱을 비활성화한 후 상황이 일관되지 않기 시작했습니다. ssh_config(SSH 멀티플렉싱이 이를 방해해서는 안 된다는 것을 아는 한 이는 말이 안 됩니다.) 설정은 다음과 같습니다. :

ControlPath /tmp/%r@%h:%p
ControlMaster auto
ControlPersist yes

실제 스크립트를 실행하기 위해 SSH 서버에 요청하는 startx매개변수로 전달된 스크립트를 실행하려고 할 때 마다 검은색 화면이 나타나고 아무 일도 일어나지 않고 아래 예와 같이 그대로 유지됩니다.dwmdwm

startx /usr/local/bin/dwm -- :1

그러나 쉘 명령 대체와 쉘 noop 연산자를 사용하여 약간 다른 위의 동일한 명령을 실행하면 정상적으로 작동합니다( dwm표시하는 데 평소보다 몇 초 더 오래 걸릴 수 있습니다. 아마도 추악한 해킹으로 인해)

: $(startx /usr/local/bin/dwm -- :1)

답변1

마침내 해결책을 찾았습니다. 어떤 이유로 문제는 다음과 같습니다.

  • TTY 할당을 강제하려면 -ttSSH 클라이언트에서 플래그를 제거해야 합니다.
  • Docker에게 pseudo-tty를 할당하고 대화형 모드로 실행하도록 요청하려면 -itSSH 서버 측의 Docker CLI에서 플래그를 제거해야 합니다.

위 사항은 대화형 컨테이너와 같은 그래픽 애플리케이션에만 적용되지만 st그래픽 firefox이 아닌 애플리케이션( fishshell 및 ) 에는 SSH 클라이언트와 Docker CLI neovim모두에서 여전히 위의 두 플래그가 필요합니다.-tt-t

관련 정보