헤드리스 서버에서 gnome-terminal을 원격으로 시작하려면 어떻게 해야 합니까? (X11 전달을 통해 실행하지 못함)

헤드리스 서버에서 gnome-terminal을 원격으로 시작하려면 어떻게 해야 합니까? (X11 전달을 통해 실행하지 못함)

SSH를 사용하여 액세스하는 헤드리스 VM(Ubuntu 서버 17.04 실행)이 있습니다. 나는 X11 포워딩의 기본에 익숙하며 xterm과 친구들을 잘 포워딩할 수 있습니다. XFCE 터미널도 OK를 전달합니다.

Gnome 터미널을 사용하고 싶은데 실행이 안되는 것 같습니다. 대신 잠시 동안 멈추고 결국 다음과 같은 오류가 발생합니다.

Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached

흥미롭게도 gnome-terminal은 내 VM(startx를 통해 실행됨)에서 실행되는 로컬 데스크톱 세션이 있는 경우 X11을 통해 원격으로 작동합니다.

실행해야 할 일종의 Gnome 서비스가 있는 것 같지만, 그것이 무엇인지, 전체 데스크탑 세션의 컨텍스트 외부에서 시작하는 방법을 알 수 없습니다. VM은 기본적으로 헤드리스이기 때문에 일반적으로 실행하지 않습니다.

내 VM에서 로컬로 GUI 데스크탑 세션을 시작하지 않고도 Gnome 터미널이 원격으로 작동하도록 하기 위해 내가 할 수 있는 일에 대해 통찰력을 얻은 사람이 있습니까?

답변1

그것은 작동하지 않습니다. 왜냐하면 gnome-terminal(다른 것과 마찬가지로gnome-thing)는 dbus에 연결을 시도하지만 오랫동안 응답을 받지 못한 후 실패합니다.

가장 쉬운 해결 방법은 세션에 대해 dbus 인스턴스를 시작하는 것입니다.

export $(dbus-launch)
gnome-terminal

당신이 시작했다면웨이랜드세션원격을(를) 처음 실행했으므로 export $(dbus-launch)다시 실행해야 합니다. 그렇지 않으면 전달된 디스플레이에서 X11 인스턴스 대신 원격 디스플레이에서 gnome-terminalWayland 인스턴스가 시작됩니다 .gnome-terminal

gnome-terminal-server이 경우의 또 다른 해결 방법은 X11을 사용하는 마지막 창이 닫힌 후 종료되는 X11을 명시적으로 실행하는 것입니다 . 예:

#! /bin/bash
ID=foo.bar$RANDOM
GDK_BACKEND=x11 /usr/libexec/gnome-terminal-server --app-id "$ID" &
sleep .4        # yuck
gnome-terminal --app-id "$ID"
wait

답변2

다음을 사용하여 바닐라 Ubuntu 또는 Debian에서 수행할 수 있습니다.

ssh -X user@host dbus-launch gnome-terminal

내 노트에는 다음 과 같은 공통 플래그가 있습니다 dbus-launch.--exit-with-x11--exit-with-session

남은 문제는 로드하는 데 시간이 걸린다는 것입니다.

제 생각에는 로컬이 gnome-terminal원격으로 대화 하는 것 같습니다 gnome-terminal-server. 코드를 내려서 수정해야 하지만 소프트웨어는 매우 간단하고 너무 간단합니다.

편집: 또한 패키지를 요구하지 않고도 이를 수행할 수 있습니다 x11-dbus(기본적으로 Ubuntu에는 작지만 작지만).

이것은 모든 gnome-terminal버전에서 작동하지 않지만 Ubuntu 22 및 Debian 11에서 테스트한 결과 작동합니다.

ssh -X user@host gnome-terminal --disable-factory

터미널 명령의 스타일/길이 외에 이러한 접근 방식에는 차이점이 있습니다.

원래 접근 방식은 원격 시스템과 상호 작용하는 방식으로 인해 인스턴스를 dbus-launch시작합니다 .gnome-terminalgnome-terminal-server

그러나 이 접근 방식은 예를 들어 Ubuntu 22 도크와 더 원활하게 작동하는 인스턴스를 --disable-factory시작합니다 .gnome-terminal

이 두 가지 옵션 중 하나가 귀하의 요구 사항을 충족하길 바랍니다. 다른 접근 방식도 있지만 제 생각에는 이것이 얼마나 쉬운 지에 있어서 가장 좋습니다.

답변3

단일 세션에서 X11 전달을 수행하는 간단한 경우는 다음을 참조하세요. https://askubuntu.com/a/1279065/463121

로그인 후:

$ dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY

gnome-terminal은 빠르고 X11을 통해 전달됩니다.

문제가 발생하기 시작하면 개인 dbus 데몬이 멈춘 것일 수 있습니다. 모든 사용자 프로세스를 종료하고 다시 로그인할 수 있다면 괜찮습니다.

편집: 또는 심지어:

$ dbus-update-activation-environment --all

~에서https://unix.stackexchange.com/a/243696/139357

답변4

X를 통해 앱을 실행하는 것은 정말 느릴 수 있습니다.
저는 전 세계 고객 시스템에서 SSH를 통한 VNC 터널링에 많은 성공을 거두었습니다.

원격 시스템에 Tigervnc와 같은 VNC 서버를 설치하고 데몬을 시작합니다. (yum install -y Tigervnc-server ; vncserver :3 - 또는 사용하려는 포트). 비밀번호를 설정하라는 메시지가 표시됩니다.

로컬 컴퓨터에 VNC 클라이언트를 설치합니다(yum install -y Tigervnc). ~/.vnc/xstartup 파일에 "exec /usr/bin/gnome-terminal"을 추가할 수 있습니다. 그런 다음 다음을 실행하십시오: ssh -L 5903:localhost:5903 -N -f -l user remote-server-IP-or-hostname 여기서 포트 번호는 59이고 선택한 포트 번호는

다른 터미널에서 다음을 수행하십시오: vncviewer :3

서버에 설정된 비밀번호를 묻는 메시지가 표시됩니다.

관련 정보