Làm thế nào để truy cập vào một máy Ubuntu thông qua VNC từ màn hình đăng nhập?


17

Tôi muốn truy cập máy Ubuntu từ xa thông qua VNC. Nhưng tôi chỉ có thể truy cập vào máy Ubuntu nếu người dùng đã đăng nhập. Tôi muốn truy cập vào máy Ubuntu thông qua VNC từ màn hình đăng nhập. Chúng tôi có thể truy cập tất cả các máy windows từ màn hình đăng nhập. Tuy nhiên, chúng tôi không thể truy cập vào máy Ubuntu từ màn hình đăng nhập. Có một số cách nhưng tôi không nhận thức được các chi tiết. Ai đó có thể đưa ra một giải pháp cho vấn đề này?


Nếu máy kia nằm trên cùng một mạng LAN, việc sử dụng XDMCP thay vì VNC là khả thi. Nếu nó không nằm trên cùng một mạng LAN, thì X không kết nối qua mạng có thể quá chậm.
Robin Green

Câu trả lời:


10

Đặt cược tốt nhất của bạn là cài đặt xrdp Cài đặt xrdp . Sau khi cài đặt, bạn có thể sử dụng máy khách RDP để kết nối với máy - sau đó bạn sẽ được nhắc nhập thông tin đăng nhập như trên màn hình đăng nhập.


Tôi đã cài đặt xrdp nhưng tôi vẫn không thể truy cập vào máy Ubuntu từ màn hình đăng nhập.
karthick87

@karthick: Bạn đang kết nối với máy bằng VNC hoặc sử dụng máy khách RDP?
Nathan Osman

Tôi không tìm thấy máy khách RDP trong máy của mình. Nó sẽ nằm ở đâu?
karthick87

@karthick: Bạn có đang sử dụng Ubuntu làm khách hàng của mình không? Nếu vậy, chương trình sử dụng được gọi là "Terminal Server Client". Trên Windows, nó được gọi là "Remote Desktop" IIRC.
Nathan Osman

Vâng cảm ơn bạn. Có thể tạo launcher cho Terminal Server Client không?
karthick87

5

Nhìn chung, tôi khuyên bạn nênx11vnc .

TL; DR

apt-get -y install x11vnc
x11vnc -storepasswd

Nhập mật khẩu của bạn, nó được lưu theo mặc định ở ~/.vnc/passwd dạng được mã hóa BECNG CÁCH. Nó có thể được giải mã vì khóa được biết đến. .. bảo vệ nó với quyền hệ thống tập tin)

chmod 600 ~/.vnc/passwd

Lưu tập lệnh trợ giúp của tôi cục bộ:

mkdir ~/bin/
curl https://gist.githubusercontent.com/trinitronx/76d2bf98489e5e3e84fa/raw/53885d87f91320b574ca4f7d609e4bb268274f68/start_x11vnc.sh  > ~/bin/start_x11vnc.sh && chmod +x ~/bin/start_x11vnc.sh

Từ máy chủ VNC Client của bạn:

ssh -f  -L 5900:127.0.0.1:5900 -p 22 youruser@your-ubuntu-host.example.com '~/bin/start_x11vnc.sh && sleep 10'

Hoặc, từ máy chủ VNC Server của bạn, hãy chạy:

~/bin/start_x11vnc.sh

thông qua một thiết bị đầu cuối (hoặc bắt đầu nó như là một daemon với -forevernhư một dịch vụ init.d , dịch vụ mới nổi , đơn vị systemd , hoặc tuy nhiên bạn muốn)

Bây giờ hãy chạy Ứng dụng khách VNC của bạn từ Máy chủ khách hàng của bạn, chỉ vào : 127.0.0.1:5900, đăng nhập bằng mật khẩu được lưu ở trên.

Sử dụng "Cookie ma thuật" X11

Hầu hết các trình quản lý hiển thị X (như GDM , XDM , KDM ) khởi động máy chủ X11 ban đầu và xác thực với nó bằng MIT Magic Cookie . Tùy thuộc vào trình quản lý hiển thị của bạn, cookie ma thuật sẽ được tìm thấy ở một trong những địa điểm khác nhau .

Tôi đã rất may mắn khi mở một phiên VNC trên màn hình đăng nhập Ubuntu GDM * NOTE1 bằng cách tìm cookie ma thuật với tập lệnh này :

#!/bin/bash
DEFAULT_DISPLAY=:0
X11VNC_DISPLAY="$DEFAULT_DISPLAY"

if [ -x /usr/bin/x11vnc ]; then
     [ "$1" == '-nocache' ] && CACHE_FLAG='-noncache' || CACHE_FLAG='-noncache'
     [ "$2" == '-guess' ] && GUESS_FLAG='-auth guess' || GUESS_FLAG=''
         [ -f /root/.vnc/passwd ] && PASSWORD="/root/.vnc/passwd"
         [ -f $HOME/.vnc/passwd ] && PASSWORD="$HOME/.vnc/passwd"
         [ ! -z "$PASSWORD" ] && x11vnc -display $X11VNC_DISPLAY -xkb -rfbauth $PASSWORD -rfbport 5900 -shared -forever -nowf -norc -notruecolor -bg $GUESS_FLAG $CACHE_FLAG -noxdamage
    EXIT_CODE=$?
     if [ $EXIT_CODE -ne 0 ]; then

        echo "\n*********************************************************************"
        echo "*** Could not start x11vnc!  Trying again with gdm MAGIC_COOKIE! ***"
        echo "*********************************************************************\n"

        # Old GDM location for Ubuntu <= 17.10
        MAGIC_COOKIE_FILE=`sudo find /var/run/gdm/ -iname database | grep for-gdm`

        # New GDM location for Ubuntu >= 17.10
        [ -z "$MAGIC_COOKIE_FILE" ] && NUM_MAGIC_COOKIE_FILE_SESSIONS=`sudo find /run/user/ -iwholename '*/gdm/*' -iname '*Xauthority' 2>/dev/null | wc -l`
        if [ -z "$MAGIC_COOKIE_FILE" -a "$NUM_MAGIC_COOKIE_FILE_SESSIONS" -gt 1 ]; then
            # Find the current user's session
            MAGIC_COOKIE_FILE=`sudo find /run/user/$(id -u) -iwholename '*/gdm/*' -iname '*Xauthority'`
            X11VNC_DISPLAY=":1"
        else
            # Find the GDM user's session (or whichever shows up first in ps list)
            # This should pick up the original gdm session which grabs :0
            # If you login after gdm login screen, your Xorg server may end up on another display!
            # Workaround for now is to restart x11vnc on that display number
            [ -z "$MAGIC_COOKIE_FILE" ] && MAGIC_COOKIE_FILE=`sudo find /run/user/ -iwholename '*/gdm/*' -iname '*Xauthority' | head -n1`
        fi
        # Old lightdm location for Ubuntu <= 17.10
        [ -z "$MAGIC_COOKIE_FILE" ] && MAGIC_COOKIE_FILE=`sudo find /var/lib -name '.Xauthority' -o -wholename '/var/run/lightdm/root/:0' | head -n1`
        #sudo bash -c "[ -z \"$MAGIC_COOKIE_FILE\" -a -e /var/run/lightdm/root/:0 ]" && MAGIC_COOKIE_FILE='/var/run/lightdm/root/:0'
        [ -n "$MAGIC_COOKIE_FILE" -a -z "$GUESS_FLAG" ] && AUTH_COOKIE_FLAG="-auth $MAGIC_COOKIE_FILE"
        [ ! -z "$PASSWORD" ] && sudo x11vnc -display $X11VNC_DISPLAY -xkb -rfbauth $PASSWORD -rfbport 5900 -shared -forever -nowf -norc -notruecolor -bg $GUESS_FLAG $CACHE_FLAG -noxdamage ${AUTH_COOKIE_FLAG}
    fi
fi

Tôi có thể bắt đầu tập lệnh này (tôi đã gọi nó start_x11vnc.sh) bất cứ lúc nào thông qua SSH ... ngay cả trước khi đăng nhập qua gdmmàn hình đăng nhập. Nó khởi chạy một x11vncmáy chủ mà sau đó tôi có thể kết nối với đường hầm SSH . (Sử dụng ssh -L 5900:127.0.0.1:5900hoặc thêm LocalForward 5900 127.0.0.1:5900vào mục nhập của máy chủ lưu trữ của bạn ~/.ssh/config).

LƯU Ý 1 : Trong một số bản phát hành phân phối mới như Ubuntu> = 17.10, hiển thị phiên X đăng nhập GDM hoàn toàn tách biệt với hiển thị phiên X của người dùng đã đăng nhập. Do đó, trước tiên cần kết nối với phiên GDM X, đăng nhập ... và cuối cùng ngắt kết nối và kết nối lại với phiên X mới bắt đầu. Tại sao bây giờ họ làm theo cách này là một bí ẩn, nhưng nó đã phá vỡ phiên bản cũ của kịch bản này.


Không hoạt động. Máy khách VNC kết nối rồi đóng ngay lập tức
Dims

@Dims Sử dụng lệnh:vncviewer <remote_ip>
Gokul NC

tập lệnh đã bị hỏng đối với các phiên bản mới của Ubuntu ... Tôi đã cập nhật nó với bản hack để cho phép nó hoạt động trở lại. Có vẻ như phiên hiển thị gdm hiện tách biệt với phiên đã đăng nhập, vì vậy nếu bạn đang sử dụng tập lệnh này trên Ubuntu, trước tiên, nó sẽ đưa bạn đến màn hình đăng nhập GDM, sau đó khi bạn đăng nhập màn hình phiên X này sẽ trống. Bây giờ bạn cần dừng quá trình x11vnc đầu tiên và chạy lại tập lệnh một lần nữa để đính kèm lại vào phiên X & màn hình đã đăng nhập riêng.
TrinitronX


0

Đây là cách thực hiện với VNC, nếu bạn không muốn sử dụng RDP:

  1. Cài đặt máy chủ X11VNC: sudo apt-get install x11vnc(Hoặc thông qua Trung tâm phần mềm Ubuntu -> Máy chủ X11VNC)
  2. Đặt mật khẩu:

    sudo mkdir /etc/x11vnc
    sudo x11vnc -storepasswd /etc/x11vnc/passwd
    

    Chọn ylưu mật khẩu.

  3. Tạo một tệp trống trong /etc/initđược gọi là x11vnc.conf:

    sudo -H gedit /etc/init/x11vnc.conf
    
  4. Dán cái này vào tập tin:

    start on login-session-start
    
    exec x11vnc -xkb -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbauth /etc/x11vnc/passwd -rfbport 5900 -bg -o /var/log/x11vnc.log
    
  5. Lưu và đóng

  6. Khởi động lại Ubuntu

Đó là nó! Bây giờ bạn có thể kết nối với bất kỳ ứng dụng khách VNC nào ngay cả trước khi đăng nhập.


Điều này đã không làm việc.
chùy

@mace Thú vị, nó đã làm việc cho tôi, có thể nó phụ thuộc vào phiên bản Ubuntu. Thật không may, tôi không nhớ phiên bản Ubuntu của mình là gì khi tôi đã thực hiện thủ tục này.
Didier A.

0

lại: thử với X11vnc

x11vnc chưa được cập nhật kể từ tháng 9 năm 2011 !!!! Có một số lỗi đã biết và tôi đang bị một lỗi kích hoạt ngăn chặn x11vnc ngăn chặn bất cứ khi nào một cuộc đối thoại bật lên (chẳng hạn như nhấp vào menu 'tệp' trên bất kỳ cửa sổ nào) ngắt kết nối phiên.

Raspberry pi có thể kết nối với phiên quản lý máy tính để bàn vào ngày: 0, tại sao địa ngục lại xảy ra sự cố như vậy đối với Ubuntu?!?! Tại sao cần phải dựa vào một chương trình 7 năm mồ côi để làm điều này trên bất kỳ hệ điều hành hiện đại nào?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.