헤드리스 서버에서 원격으로 gnome-terminal을 시작하는 방법은 무엇입니까? (X11 전달을 통해 시작할 수 없습니다)

헤드리스 서버에서 원격으로 gnome-terminal을 시작하는 방법은 무엇입니까? (X11 전달을 통해 시작할 수 없습니다)

SSH를 사용하여 액세스하는 헤드리스 가상 머신(Ubuntu Server 17.04 실행)이 있습니다. 나는 X11 전달의 기본 사항을 잘 알고 있으며 xterm과 친구들을 잘 전달할 수 있습니다. XFCE 터미널도 OK를 전달합니다.

Gnome Terminal을 사용하고 싶은데 시작되지 않는 것 같습니다. 대신 잠시 동안 멈추고 결국 오류가 발생합니다.

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

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

일종의 Gnome 서비스가 실행되어야 할 것 같은데, 그것이 무엇인지, 전체 데스크톱 세션의 컨텍스트 밖에서 서비스를 시작하는 방법을 알 수 없습니다. 가상 머신은 기본적으로 헤드리스이기 때문에 일반적으로 시작하지 않습니다.

내 가상 머신에서 로컬로 GUI 데스크탑 세션을 시작하지 않고도 Gnome Terminal이 원격으로 작동하도록 하려면 어떻게 해야 하는지 아는 사람이 있습니까?

답변1

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

가장 간단한 해결책은 세션에 대한 dbus 인스턴스를 시작하는 것입니다.

export $(dbus-launch)
gnome-terminal

시작하면웨이랜드회의 시간:외딴처음 실행했기 때문에 export $(dbus-launch)다시 실행해야 합니다. 그렇지 않으면 gnome-terminal전달된 모니터의 X11 인스턴스 대신 Wayland 인스턴스가 원격 모니터에서 시작됩니다.gnome-terminal

이 경우 또 다른 해결 방법은 X11을 명시적으로 실행하는 것입니다. X11 gnome-terminal-server은 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패키지 없이도 이 작업을 수행할 수 있습니다(우분투에서는 매우 작지만 기본적으로 사용할 수 없습니다).

이것은 모든 버전에서 작동하지 않지만 gnome-terminalUbuntu 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 터널을 설정하는 데 많은 성공을 거두었습니다.

원격 컴퓨터에 VNC 서버(예: TigerVNC)를 설치하고 데몬을 시작합니다. (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

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

관련 정보