簡體   English   中英

如何為當前會話自動設置 $DISPLAY 變量?

[英]How do I automatically set the $DISPLAY variable for my current session?

我看到$DISPLAY設置為 localhost:0.0 如果我在 vnc 服務器上運行這可能不正確,有沒有辦法在我的登錄腳本中自動設置它?

這是我剛剛敲的東西。 它檢查上次啟動的“gnome-session”進程的環境(當 VNC 啟動會話/窗口管理器時正確設置了 DISPLAY)。 將“gnome-session”替換為您的 VNC 服務器在啟動時啟動的任何進程的名稱。

PID=`pgrep -n -u $USER gnome-session`
if [ -n "$PID" ]; then
    export DISPLAY=`awk 'BEGIN{FS="="; RS="\0"}  $1=="DISPLAY" {print $2; exit}' /proc/$PID/environ`
    echo "DISPLAY set to $DISPLAY"
else
    echo "Could not set DISPLAY"
fi
unset PID

您應該能夠將其放入 .bashrc 文件中。

你使用 Bash 嗎? 轉到主目錄中的文件 .bashrc 並設置變量,然后將其導出。

顯示=本地主機:0.0; 出口顯示

如果您想為所有用戶執行此操作,則可以使用 /etc/bashrc。

您可能還想查看 ~/.bash_profile 和 /etc/profile

編輯:

function get_xserver ()
{
    case $TERM in
       xterm )
            XSERVER=$(who am i | awk '{print $NF}' | tr -d ')''(' )    
            XSERVER=${XSERVER%%:*}
            ;;
        aterm | rxvt)           
            ;;
    esac  
}

if [ -z ${DISPLAY:=""} ]; then
    get_xserver
    if [[ -z ${XSERVER}  || ${XSERVER} == $(hostname) || \
      ${XSERVER} == "unix" ]]; then 
        DISPLAY=":0.0"          # Display on local host.
    else
        DISPLAY=${XSERVER}:0.0  # Display on remote host.
    fi
fi

export DISPLAY

我在這里猜測,基於我過去確實解決過的問題:

  • 您正在連接到機器 B 上的 vnc 服務器,使用機器 A 上的 VNC 客戶端顯示它
  • 你在機器 B 上啟動一個控制台(xterm 或等效的)並使用它連接到機器 C
  • 你想在機器 C 上啟動一個基於 X 的應用程序,讓它顯示到機器 B 上的 VNC 服務器,這樣你就可以在機器 A 上看到它。

我最終得到了兩個解決方案。 我最初的解決方案是基於使用 rsh。 從那時起,我們的大多數服務器都安裝了 ssh,這使這變得更容易。

使用 rsh,我將機器 vs 操作系統 vs 自定義選項放在一起,這將在 perl 中指導這個過程。 Bourne shell 還不夠,我們在 Sun 或 HP 機器上沒有 bash(當時在 AIX 上沒有 bash - AIX 5L 還沒有發布)。 Korn shell 也不是一個很好的選擇,因為我們的大多數 Linux 機器都沒有安裝 pdksh。 但是,如果您不面對這些限制,我認為您可以在 ksh 或 bash 中實現該想法。

無論如何,我基本上會運行 'rsh $machine -l $user "$cmd"' 其中 $machine,當然,是我登錄的機器,$user,同樣明顯(盡管當我以“root “這有一些差異,因為我們在某些機器上有多個根,原因我不完全理解),並且 $cmd 基本上是“DISPLAY=$DISPLAY xterm”,但如果我啟動 konsole,例如,$cmd 將是“konsole --display=$DISPLAY”。 由於 $DISPLAY 是在本地進行評估(在正確設置的地方),而不是通過 rsh 逐字傳遞,因此顯示將始終正確設置。

我還必須確保沒有人做任何愚蠢的事情,例如如果已經設置了重置顯示。

現在,我只使用 ssh,確保服務器上的 X11Forwarding 設置為 yes(sshd_config),然后我就可以 ssh 到機器,讓 X 命令通過加密的線路,它總是會回到正確的地點。

您的 vncserver 有一個配置文件,用於設置顯示編號。 要自動執行,一種解決方案是解析此文件,提取數字並正確設置。 更簡單(更好)的是在配置腳本中設置此顯示編號,並在 VNC 服務器配置和初始化腳本中使用它。

登錄后,您需要告訴您的 vnc 客戶端導出正確的 $DISPLAY。您如何執行此操作可能取決於您的 vnc 客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM