1. 程式人生 > >[Linux] Windows 和 Linux 遠端桌面連線

[Linux] Windows 和 Linux 遠端桌面連線

[Linux] Win 10 和 CentOS 7 遠端桌面連線

Win 10 遠端連線 CentOS 7

1 通過 ssh 連線命令列介面

  1. 在 CentOS 7 中安裝 ssh 服務
  2. 在 Win 10 中使用 PuTTY 來通過 ssh 遠端連線 CentOS 7 的命令列介面。

2 通過 vnc 連線圖形介面

2.1 CentOS 7 配置 vncserver

  1. 在 CentOS 7 中安裝 tigervnctigervnc-server

    yum install -y tigervnc tigervnc-server
  2. /lib/systemd/system/

    [email protected] 複製為 /etc/systemd/system/[email protected]:1.service

    cp /lib/systemd/system/[email protected] /etc/systemd/system/[email protected]:\1.service

    新檔案的 :1 表示將配置 vnc 埠號為 1 的 vnc server desktop,使遠端使用者可以通過 X.X.X.X:1 來登入本機圖形介面,其中 X.X.X.X為本機 IP 地址,可以通過改變數字 i 來配置多個 [email protected]:i.service

    該配置檔案的註釋中有如何快速開始的教程:

    # Quick HowTo:
    # 1. Copy this file to /etc/systemd/system/[email protected]
    # 2. Replace <USER> with the actual user name and edit vncserver
    # parameters appropriately
    # (“User=<USER>” and “/home/<USER>/.vnc/%H%i.pid”)
    # 3. Run systemctl daemon-reload


    # 4. Run systemctl enable [email protected]:<display>.service

  3. 進入 /etc/systemd/system/ 目錄,修改 [email protected]:1.service 檔案的配置,上面的註釋只說將 <USER> 替換為合適的使用者名稱,並設定相應的正確引數。但是我在實際配置過程中因為這裡配置不對,會造成 vnc server 啟動失敗,遠端連線失敗等各種問題。最後,經過多次嘗試以及參考網上部落格,我對本檔案做出如下修改可以達到基本正確的效果:

    原檔案需修改內容:

    [Service]
    Type=forking
    User=<USER>

    # Clean any existing files in /tmp/.X11-unix environment
    ExecStartPre=-/usr/bin/vncserver -kill %i
    ExecStart=/usr/bin/vncserver %i
    PIDFile=/home/<USER>/.vnc/%H%i.pid
    ExecStop=-/usr/bin/vncserver -kill %i

    針對 root 修改內容

    [Service]
    Type=simple
    User=root
    # Clean any existing files in /tmp/.X11-unix environment
    ExecStartPre=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’
    ExecStart=/bin/sh -c ‘/usr/bin/vncserver %i’
    PIDFile=/root/.vnc/%H%i.pid
    ExecStop=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’

    針對 普通使用者(如tong) 修改內容

    [Service]
    Type=simple
    User=tong

    # Clean any existing files in /tmp/.X11-unix environment

    ExecStartPre=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’
    ExecStart=/bin/sh -c ‘/usr/bin/vncserver %i’
    PIDFile=/home/tong/.vnc/%H%i.pid
    ExecStop=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’

  4. 需要注意的是,原 [email protected]:1.service 檔案裡有一行 Type=forking,需要將其改成 Type=simple,否則啟動 vncserver 服務會失敗。

  5. 執行下列命令,重新載入服務,並將 [email protected]:1.service 服務新增到開機啟動:

    systemctl daemon-reload 
    systemctl enable [email protected]:1.service
  6. 開啟 [email protected]:1.service 服務:

    systemctl start [email protected]:1.service

    重啟 [email protected]:1.service 服務:

    systemctl restart [email protected]:1.service
  7. 配置防火牆允許 vnc-server 服務:

    firewall-cmd --permanent --add-service=vnc-server
    firewall-cmd --reload
  8. 某一使用者身份(比如 root)下可以通過 vncpasswd 設定該使用者在 vnc server 上的密碼。

正常情況下,以上步驟完成後,本機所配置的 :1 埠的 vncserver 服務將會正常執行啟動(包括每次重開機後),遠端使用者可以通過 X.X.X.X:1 以 root 使用者身份,使用相應的 vnc 密碼來登入本機的圖形介面。

2.2 CentOS 7 vncserver 其他命令

  1. 如果某一身份的使用者之前沒有設定過密碼,那麼在第一次執行 vncserver 命令時,會要求輸入密碼:

    [[email protected] system]# vncserver

    You will require a password to access your desktops.

    Password:

    在輸入密碼後,vncserver 會自動建立該使用者身份的新的 vnc server desktop(新 vnc 埠),及相關配置檔案:

    New ‘localhost.localdomain:1 (root)’ desktop is localhost.localdomain:1

    Creating default startup script /root/.vnc/xstartup
    Creating default config /root/.vnc/config
    Starting applications specified in /root/.vnc/xstartup
    Log file is /root/.vnc/localhost.localdomain:1.log

  2. 再次在相同使用者下執行 vncserver ,不用再輸入密碼,並自動建立新的 vnc desktop(新 vnc 埠)。

    [[email protected] ~]# vncserver

    New ‘localhost.localdomain:3 (root)’ desktop is localhost.localdomain:3

    Starting applications specified in /root/.vnc/xstartup
    Log file is /root/.vnc/localhost.localdomain:3.log

  3. 通過 vncserver -list 命令可以檢視當前使用者下有效的 vnc 埠:

    [[email protected] ~]# vncserver -list

    TigerVNC server sessions:

    X DISPLAY # PROCESS ID
    :1 8338
    :3 10160

    vnc 埠號並不是實際的網路埠,而是從 1 開始遞增的邏輯埠號,在客戶端通過 vnc server 的 IP 地址以及該邏輯 vnc 埠號連線相應的 vnc server desktop 圖形介面。

  4. 通過 vncserver -kill :i 命令可以刪除 vnc 埠號為 i 的 vnc server desktop。

  5. 這裡需要注意的一點是,有時執行 vncserver 時會出現一下警告:

    [[email protected] .X11-unix]# vncserver

    Warning: wayne.buptlab:4 is taken because of /tmp/.X11-unix/X4
    Remove this file if there is no X server wayne.buptlab:4

    New ‘wayne.buptlab:5 (root)’ desktop is wayne.buptlab:5

    Starting applications specified in /root/.vnc/xstartup
    Log file is /root/.vnc/wayne.buptlab:5.log

    這個警告表示在 /tmp/.X11-unix/ 下已經存在 X4 檔案,這個檔案表示之前存在過 vnc 埠號為 4 的 vnc server desktop,但可能是由於不正常關閉等原因使得這個埠號發生了異常,vnc server 無法再使用該埠號。

    雖然 vncserver 命令會自動建立新埠,但是這一警告對於配置 [email protected]:i.service 服務卻有嚴重影響,比如我希望配置 [email protected]:3.service 服務,希望遠端使用者可以通過 X.X.X.X:3 來登入本機,但如果因為異常原因 /tmp/.X11-unix/ 下已經存在 X3,那麼 [email protected]:3.service 服務在將無法正常啟動執行(包括重啟開機後),無法自動建立 vnc 埠號為 3 的 vnc server desktop。

    目前我找到的解決方法也簡單粗暴,那就是刪除 /tmp/.X11-unix/ 下的異常 Xi 檔案(甚至直接全部刪除以可以,下次重啟開機時 [email protected]:i.service 會重新新建對應埠號的 Xi 檔案。

2.3 Win 10 遠端登入 CentOS 7

  1. win 10 使用 VNC Viewer 軟體,輸入有效的 vnc server 地址(X.X.X.X:1),便可以登入相應 IP 地址(X.X.X.X)和 vnc 埠(:1)的遠端 CentOS 7 主機。

CentOS 7 遠端連線 Win 10 Pro

  1. CentOS 7 安裝 rdesktop 和 tsclient,其中rdesktop是基於命令列的工具,tsclient只是一個圖形化的介面,依賴於rdesktop:

    yum install -y rdesktop
    yum install tsclient
  2. Win10 Pro 在 “我的電腦->屬性->遠端” 中配置“遠端桌面”,啟用“允許遠端連線到此計算機”,並取消勾選“僅允許執行使用網路級別身份驗證的遠端桌面的計算機連線”(若不取消勾選 rdesktop 將不能遠端連線 Win 10)。

  3. CentOS 命令列可以使用以下命令遠端連線 Win 10:

    rdesktop -f -a 16 X.X.X.X
  4. 需要注意的問題是 Win 10 家庭版沒有遠端桌面的功能。而我的電腦正好是 Win 10 家庭版,導致了我的電腦始終不能被遠端桌面連線。所以如果想讓自己的電腦能夠被遠端桌面連線,請使用 Win 10 專業版。

參考資料

  1. CenOS 配置 vncserver(好):

  2. Windows 遠端連線 CentOS:

  3. 警告 /tmp/.X11-unix/Xi :

  4. CentOS遠端連線 Windows:

  5. Windows 和 CentOS 互相遠端桌面:

  6. 比較 Windows 版本功能: