X11 轉發適用於某些 progs,其他 progs 忽略 $DISPLAY?
我有 2 台 linux 機器正在執行。如果我從一個連接到另一個
ssh -X 192.168.1.6
我能夠啟動
xterm
,或者firefox
視窗在我正在使用的機器上按預期顯示。但是如果我啟動
gnome-terminal
ormeld
,這些程序的視窗就會顯示在遠端機器上。似乎沒有一般的身份驗證問題,因為我沒有收到錯誤消息。我已經找到了那個執行緒:如何在我的無頭伺服器上遠端啟動 gnome-terminal?(無法通過 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
為
gnome-terminal
. 但對於meld
是沒有選擇--app-id
的。我有辦法讓視窗顯示在正確的機器上嗎?
順便說一句:兩台機器上的 linux 版本都是 5.15.12-200.fc35.x86_64 fedora
如何在沒有任何額外腳本和環境黑客的情況下使其工作:
只需在任何地方禁用 Wayland!在您選擇要登錄的使用者後, fedora gdm 登錄螢幕會在登錄螢幕上提供一個幾乎隱藏的菜單。有一個小齒輪,在目前的gnome版本中它在右下,並且選擇“gnome under X11”以擺脫wayland問題。在這也觸摸屏工作之後,字型渲染得到了很大改進,滑鼠指針校準工作完美。他們都沒有與 Wayland 合作……僅作為旁注!注意:您必須在主機和遠端端隨時隨地禁用 Wayland!
據我了解,指示程序使用 X11 轉發的重要部分是
GDK_BACKEND=x11
變數。沒有它,GNOME 應用程序將預設使用 Wayland 視窗系統,這將導致視窗顯示在遠端機器上。
--app-id
只是停止gnome-terminal
嘗試連接到任何其他現有實例,這些實例gnome-terminal-server
可能在遠端主機上的同一使用者帳戶上執行(與該主機上的本地會話相關聯),或者可能由會話按需啟動D-Bus,不知道使用 X11 轉發的要求。相反,gnome-terminal
只會與gnome-terminal-server
被告知使用 X11 轉發和GDK_BACKEND=x11
環境變數的特定實例對話。
gnome-terminal
只需要這個--app-id
東西,因為gnome-terminal
它並不是真正的終端應用程序:它只是一個小型客戶端應用程序,它呼叫 D-Bus 來gnome-terminal-server
創建實際的終端視窗。這是一種gnome-terminal
無法分辨的解決方法gnome-terminal-server
:“嘿,在創建這個新的終端視窗時,使用 X11 後端,$DISPLAY
而$XAUTHORITY
不是你可能已經擁有的任何預設顯示安排。”如果我的理論是正確的,那麼你應該可以從
meld
一個簡單的開始:GDK_BACKEND=x11 meld
如果這可行,那麼您可以創建一個簡單的包裝腳本,如下所示:
#!/bin/sh if [ "$SSH_CONNECTION" != "" ] && [ "$DISPLAY" != "" ]; then GDK_BACKEND=x11 /usr/bin/meld "$@" else exec /usr/bin/meld "$@" fi
假設 real
meld
位於/usr/bin/meld
,您可以命名此腳本meld
並將其放置$PATH
在 /usr/bin 之前的某個目錄中,然後meld
總是會做正確的事情,無論您是在本地執行還是通過 SSH X11 轉發。或者,您甚至可以在遠端電腦上添加一個簡單的測試來為所有程序設置一個簡單的測試,
~/.bash_profile
只要您的會話與具有 X11 轉發的 SSH 連接相關聯:~/.profile``GDK_BACKEND=x11
if [ "$SSH_CONNECTION" != "" ] && [ "$DISPLAY" != "" ]; then export GDK_BACKEND=x11 fi