Ubuntu 設定遠端桌面(VNC 連線)

Undefined443發表於2024-04-11

連線 Xfce 遠端桌面

  1. 安裝 Xfce 以及 xfce4-goodies 軟體包,其中包含一些桌面環境的增強功能:

    sudo apt install xfce4 xfce4-goodies
    
  2. 安裝 TightVNC 伺服器

    sudo apt install tightvncserver
    
  3. 接下來,執行 vncserver 命令設定 VNC 訪問密碼,建立初始配置檔案,並啟動 VNC 伺服器例項:

    vncserver
    

    系統將提示你設定密碼,這裡需要填入一個長度小於 8 位的密碼,多餘的位數會被截去。之後你要再輸入一遍相同的密碼以確認密碼。接下來系統會提示你是否要設定提供僅檢視功能的密碼,一般我們不需要這個功能,所以這裡填 n

  4. 此時我們已經設定好了密碼。關閉 VNC 伺服器例項:

    vncserver -kill :1  # 關閉 1 號例項
    
  5. 接下來我們要修改 xstartup 檔案:

    mv ~/.vnc/xstartup{,.bak}  # 先備份原檔案
    vim ~/.vnc/xstartup  # 建立新檔案
    

    填入以下配置:

    #!/bin/bash
    xrdb $HOME/.Xresources
    startxfce4 &
    

    為檔案新增執行許可權:

    chmod +x ~/.vnc/xstartup
    
  6. 啟動 VNC 伺服器:

    vncserver -localhost
    

    由於 VNC 不具有加密功能,因此在公網上直接和 VNC 伺服器通訊並不安全。我們接下來將建立一個 SSH 隧道,透過隧道我們和 VNC 伺服器連線。這種策略將為 VNC 增加一層額外的安全性,因為唯一能夠訪問它的使用者是那些已經具有 SSH 訪問許可權的使用者。

  7. 建立 SSH 隧道

    ssh USER@HOST -L 5901:localhost:5901 -CNf
    
    • -L 59000:localhost:5901: -L 選項指定本地計算機(5901)上的給定埠將被轉發到目標伺服器上給定的主機和埠(localhost:5901,其中目標伺服器是 HOST)。
    • -C:此標誌啟用壓縮,有助於減少資源消耗並加快速度。
    • -N: 此選項告訴 SSH 你不希望執行任何遠端命令。當您只想轉發埠時,此設定很有用。
    • -f: 此選項表示將 SSH 連線放到後臺。避免長時間不用 SSH 連線時終端失去響應。
  8. 使用 VNC 客戶端進行連線

    如果你使用 macOS,可以使用系統自帶的螢幕共享應用來連線:開啟 Spotlight,搜尋並開啟 Sharing.app。之後新建一個連線,連線地址填寫 vnc://localhost:5901(你的 VNC 伺服器例項是 1 號,就填 5901,是 2 號就填 5902)

    image

    如果一切正常,你就能看到 Xfce 的遠端桌面了。

將 VNC 作為系統服務執行(開機自啟)

  1. 建立 systemd 服務檔案:

    sudo vim /etc/systemd/system/vncserver@.service
    

    在名稱末尾的 @ 符號將允許我們傳入一個引數,你可以在服務配置中使用。你將使用此引數來指定在管理服務時要使用的 VNC 顯示埠。

    將以下行新增到檔案中。確保更改 UserGroupWorkingDirectory 的值,並將 PIDFILE 值中的使用者名稱更改你的使用者名稱:

    [Unit]
    Description=Start TightVNC server at startup
    After=syslog.target network.target
    
    [Service]
    Type=forking
    User=<USER>
    Group=<GROUP>
    WorkingDirectory=/home/<USER>
    
    PIDFile=/home/<USER>/.vnc/%H:%i.pid
    ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
    ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
    ExecStop=/usr/bin/vncserver -kill :%i
    
    [Install]
    WantedBy=multi-user.target
    
  2. 重啟 systemd 守護程序

    sudo systemctl daemon-reload
    
  3. 啟用服務檔案

    sudo systemctl enable vncserver@1.service
    

    這裡的 1 表示服務應該出現在哪個顯示編號上,這裡為 :1

    現在,每次啟動系統時,都會自動啟動一個編號為 :1 的 VNC 伺服器例項。

  4. 建立 SSH 隧道

    在每次連線 VNC 服務之前,你都需要確保已經建立了 SSH 隧道:

    ssh USER@HOST -L 59000:localhost:5901 -CNf
    

Troubleshooting

灰屏問題

檢查 ~/.vnc/xstartup 配置檔案的內容是否正確,以及檔案是否有執行許可權。

參考:How to Install and Configure VNC on Ubuntu 22.04 | DigitalOcean

相關文章