Làm thế nào để bạn sử dụng một máy tính bảng Android như một màn hình thứ hai?


63

Tôi đã nhận thấy những người sử dụng một sản phẩm cho Windows và Mac được gọi là iDisplay cho phép bạn sử dụng Android hoặc iPad làm màn hình phụ. Đây có vẻ là một ý tưởng tuyệt vời và một cái gì đó có thể được thực hiện trên Ubuntu. Thật không may, tôi không biết làm thế nào để bắt đầu.

Làm thế nào bạn có thể tạo lại thiết lập này trên Ubuntu?


2
Câu hỏi tương tự hiện đang được thảo luận trên các diễn đàn: Sử dụng VNC làm màn hình thứ hai
ndrük

1
Câu hỏi tương tự về Siêu người dùng: Sử dụng VNC để tạo Màn hình thứ hai
ndrük

1
Ok, các giải pháp được trình bày ở đây là mạng. Nhưng có bất kỳ cơ hội nào để đạt được điều này chỉ bằng cách giả mạo một màn hình thông qua usb, để có được trải nghiệm giống như một màn hình giống như Duet không?
Augustin Riedinger

Vì vậy, Duet có thể (về cơ bản) mô phỏng chip DisplayLink trong phần mềm - tôi không biết nhưng đó là phỏng đoán của tôi. Tôi thậm chí sẽ không thử. Những gì tôi sẽ thử (và không khó) là kết nối mạng USB: tether (hoặc đảo ngược) máy tính bảng và mạng của bạn đi.
chx 10/03/2015

Câu trả lời:


28

Nhận ứng dụng khách VNC cho Android, khởi động phiên máy chủ VNC mới trên máy tính của bạn (không chỉ chia sẻ màn hình hiện tại - sử dụng vnc4server chứ không phải x11vnc), kết nối với nó từ ứng dụng khách VNC của Android và (bit thông minh) chia sẻ Bàn phím PC và chuột giữa hai phiên sử dụng sức mạnh tổng hợp.

Tất cả các phần mềm cần thiết để thực hiện việc này đều có sẵn trong các bản repos tiêu chuẩn cho phía Ubuntu và có một vài ứng dụng khách VNC miễn phí có sẵn cho Android trên thị trường.

Bạn sẽ không thể kéo các cửa sổ trên màn hình bằng phương pháp này. Vì vậy, tôi nghĩ rằng bạn sẽ cần sử dụng Xdmx để gắn kết hai phiên. Điều này khó hơn rất nhiều và có thể sẽ khiến bạn mất khả năng tăng tốc 3D.

Ngoài ra, hãy lưu ý rằng sức mạnh tổng hợp và vnc không sử dụng mã hóa theo mặc định, do đó bạn cần phải kết nối các kết nối nếu bạn không ở trên một mạng đáng tin cậy.


9
có thể thêm một ví dụ xin vui lòng
rkmax

18
thật hữu ích khi có một ví dụ từng bước mà chúng ta có thể theo dõi
OganM

2
Làm thế nào điều này sẽ làm cho một máy tính bảng trở thành màn hình thứ hai - như trong không gian màn hình nhiều hơn?
NoBugs

Tôi gặp sự cố với vncserver và Gnome 3. Mỗi lần tôi cố khởi chạy vncserver, màn hình sẽ chuyển sang màu đen. Tôi đã kết thúc bằng cách sử dụng chặt chẽ máy chủ (cũng trong repos Ubuntu) và nó đã hoạt động thử lần đầu tiên mà hoàn toàn không có cấu hình.
thứ ba

Đây là một giải pháp giống như chuyển đổi KVM hoặc điều khiển từ xa hơn là màn hình thứ hai. Có, nó cung cấp cho bạn một bộ đầu vào khác nhưng đầu ra giống nhau trên cả hai thiết bị - thậm chí bạn không thể chuyển máy tính bảng sang máy tính để bàn ảo khác với màn hình chính, bật một công tắc cả hai. Nó không trả lời câu hỏi. Câu hỏi là về việc sử dụng các thiết bị di động để có thêm không gian đầu ra, chứ không phải về đầu vào.
cprn

17

tl; dr: xrandr --fbx11vnc --clipcùng nhau tạo ra một combo sát thủ.

Chủ đề được liên kết bởi Recognitium có một ý tưởng thực sự thú vị, không chắc anh ta có ý này hay không vì tôi không thể tìm thấy tác giả mà anh ta chỉ ra và vì tôi đã theo dõi bài đăng trên diễn đàn ở đó, tôi sẽ đăng bài này một cách riêng biệt chứ không phải là chỉnh sửa :

  1. Trước tiên, giả sử máy chính có độ phân giải màn hình 1280x800 và máy thứ cấp mà bạn muốn mở rộng máy tính để bàn của mình lên trên VNC có độ phân giải màn hình 1280x1024 và bạn muốn màn hình mở rộng phải ở bên phải màn hình chính của bạn. Màn hình ảo cần phải có 1280x800 + 1280x1024 = 2560x1024. (mở rộng nó theo chiều ngang và làm cho độ phân giải dọc lớn hơn của cả hai) Vì vậy, hãy chạy xrandr --fb 2560x1024.

  2. Bây giờ, màn hình lớn hơn màn hình chính của bạn, bạn phải đảm bảo không có hiện tượng lia máy hay bất kỳ "tính năng" không mong muốn nào khác và tọa độ của góc trên cùng bên trái của màn hình chính của bạn là 0x0.

  3. x11vnc -clip 1280x1024+1281+0 cộng với bất kỳ tùy chọn x11vnc nào khác để nếm thử :)

Điều này nên được nó.


2
Đây có vẻ là một cách làm liền mạch hơn so với thủ thuật Synergy, hay đấy! Tôi tò mò không gian ảo thêm sẽ tương tác với trình quản lý cửa sổ ốp lát của tôi. Sẽ cho nó một shot trong một thời gian ngắn và báo cáo lại.
Ibrahim

2
Thất bại chộp lấy từ hàm chiến thắng. Con trỏ chuột không được phép rời khỏi màn hình chính. :(
Gringo Suave

1
Có vẻ thú vị. Tôi thực sự quản lý để có một màn hình đôi ở đó, nhưng thật không may, lệnh xrandr --fb 2560x1024dường như không có tác dụng. Điều đó có nghĩa là tôi không thể có màn hình lớn hơn kích thước màn hình chính của mình ... :(
Augustin Riedinger

1
Tôi đọc thêm về điều này . Có một X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 18 (RRAddOutputMode) Serial number of failed request: 29 Current serial number in output stream: 30 lỗi. Tôi đoán là máy tính xách tay của tôi không hỗ trợ độ phân giải cao hơn bản địa 1600*900. Có nghĩa là giải pháp này không thể làm việc. Thay vào đó, tôi sẽ phải tìm một giải pháp màn hình đôi.
Augustin Riedinger

3
Cuối cùng tôi đã làm cho nó hoạt động nhờ vào bài đăng này bằng cách chạy: sudo xrandr --fb 2732x768 --output LVDS1 --panning 2732x768+0+0/2732x768+0+0(Tôi đã bỏ lỡ --panningtùy chọn)
Augustin Riedinger

16

Không thể làm cho các câu trả lời khác hoạt động, ngoại trừ điều này , kết nối hoàn hảo.

Nó cho phép sử dụng Android như một màn hình thứ hai, chia sẻ chuột, kéo các cửa sổ giữa máy tính bảng và máy tính.

Đây là một hướng dẫn từng bước, được yêu cầu bởi các ý kiến.

A. Hướng dẫn

1. Tạo một màn hình ảo mới

Độ phân giải của máy tính bảng của tôi là 1280x1024. (Bạn có thể thay đổi 12801024ở mọi nơi trong các lệnh nếu máy tính bảng của bạn ở độ phân giải khác. Bạn cũng có thể cần thay đổi LVDS1nếu tên của màn hình mặc định khác).

Chạy trong thiết bị đầu cuối:

  1. $ gtf 1280 1024 60.

Có một dòng trong đầu ra tương tự Modeline "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync. Sao chép mọi thứ sau từ Modeline(loại trừ nó) vào lệnh tiếp theo.

  1. xrandr --newmode "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync

  2. xrandr --addmode VIRTUAL1 1280x1024_60.00

  3. xrandr --output VIRTUAL1 --mode 1280x1024_60.00 --left-of LVDS1

2. Bắt đầu VNC

  1. x11vnc -clip 1280x1024+0+0

3. Kết nối với Android (LAN (Wi-Fi) hoặc USB (Cáp))

  1. Tìm IP của máy tính của bạn bằng cách sử dụng ifconfig(khi kết nối từ LAN).

  2. Tải xuống ứng dụng VNC và kết nối với máy tính bằng IP của nó (và chọn cổng 5900) trong ứng dụng.

Thông báo

  • Tín dụng: kjans , nội dung được chỉnh sửa.
  • CẢNH BÁO : Dữ liệu không được mã hóa! (Có liên quan đến việc sử dụng Wi-Fi và không LAN)
  • CẢNH BÁO : Bất kỳ mạng nào bạn được kết nối có thể đạt tới cổng 5900 đều có thể kết nối với màn hình của bạn! (Không thành vấn đề nếu sử dụng USB VÀ hạn chế -listen <IP_ADDR>tùy chọn thêm giao diện vào x11vnc( <IP_ADDR>địa chỉ của máy tính trong mạng bạn muốn cấp quyền truy cập độc quyền))
  • Chạy bất kỳ bước nào trong 1 - 4 bước hai lần có thể xuất ra lỗi.
  • Sau khi sử dụng thành công, 5. bước phải được lặp lại cho kết nối khác.

B. Kịch bản

Hướng dẫn được triển khai dưới dạng tập lệnh (Thay đổi IP để sử dụng bằng cáp USB HOẶC xóa nó và bỏ ghi chú để sử dụng với Wi-Fi).

#!/bin/bash
W=1280
H=800
O=VIRTUAL1
if [ "$1" == "create" ]; then
    gtf $W $H 60 | sed '3q;d' | sed 's/Modeline//g' | xargs xrandr --newmode
    # sed: get third line, delete 'Modeline', get first word, remove first and last characters
    gtf $W $H 60 | sed '3q;d' | sed 's/Modeline//g' | awk '{print $1;}' | sed 's/^.\(.*\).$/\1/' | xargs xrandr --addmode $O
    gtf $W $H 60 | sed '3q;d' | sed 's/Modeline//g' | awk '{print $1;}' | sed 's/^.\(.*\).$/\1/' | xargs xrandr --output $O --left-of LVDS1 --mode
elif [ "$1" == "on" ]; then
    x11vnc -listen 192.168.42.149 -clip ${W}x${H}+0+0
    # For use in Wi-Fi LAN.
    #x11vnc -clip ${W}x${H}+0+0 #**WARNING** Unencrypted stream. VNC accessible without password through port 5900 in all internet interfaces.
else
    echo "missing argument: [create | on]"
fi

@Prometheus, x11vnc -clip 1280x1024+0+0có thể được thay thế bằng x11vnc -clip xinerama1. Ngoài ra, điều --left-of LVDS1này không thực sự cần thiết nếu sau này bạn sẽ sử Monitorsdụng ứng dụng cài đặt để định vị màn hình phụ bất cứ nơi nào bạn muốn.
LeoRochael

6
xrandr: cannot find output "VIRTUAL1"đã được trả lại khi tôi gõ số 3. Có ý tưởng nào không?
dat tutbrus

3
xrandr: cannot find output "VIRTUAL1"trở về từxrandr --addmode VIRTUAL1 1280x800_60.00
Tooniis

Điều này hoạt động, ngoại trừ bạn phải có đầu ra không sử dụng có khả năng chế độ video đích để điều này hoạt động. VIRTUAL1dường như là một giữ chỗ cho một đầu ra như vậy, không phải là một cái gì đó hiện diện trong một hệ thống điển hình.
Ruslan

1
@cprn Có, bạn có thể chia sẻ con trỏ chuột và kéo các cửa sổ. Như thể bạn có một màn hình thứ hai được kết nối
Elijas

13
  1. Cài đặt vnc4serverx2x.
  2. Sau đó, thiết lập một .vnc/xstartuptập tin cấu hình. Của tôi trông như thế này

    #!/bin/sh
    # Uncomment the following two lines for normal desktop:
    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    # exec /etc/X11/xinit/xinitrc
    
    [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey
    #vncconfig -iconic &
    #x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    #x-window-manager &
    exec gnome-session
    

    Nó khởi chạy máy tính để bàn gnome-fallback (Tôi không biết làm thế nào để gnome 3 khởi chạy trong vnc).

  3. Để khởi chạy máy chủ vnc, sử dụng vnc4server -geometry 800x480lệnh. Tất nhiên, thay vì 800x480, bạn phải đặt độ phân giải của máy tính bảng.
  4. Ra mắt x2x -east -to :1. Lệnh đó cho biết máy tính của bạn hoạt động như thể hiển thị: 1 đã ở bên phải màn hình (sử dụng -westtùy chọn nếu bạn muốn nó ở bên trái). Bạn sẽ không thể di chuyển các ứng dụng từ màn hình này sang màn hình khác, nhưng bạn có thể sử dụng một chuột và một bàn phím để điều khiển cả hai.
  5. Kết nối với màn hình được tạo vnc4servertừ máy tính bảng của bạn (số cổng là 5900 + số hiển thị (ví dụ: để hiển thị: 1 số cổng sẽ là 5901) (số hiển thị được hiển thị trong vnc4serverđầu ra của)).
  6. Để thoát khỏi x2x, nhấn Ctrl-C. Ngoài ra, bạn có thể khởi chạy nó trong nền ( x2x -east -to :1 &). Sau đó, trước tiên bạn sẽ cần di chuyển nó sang foreground ( fg) hoặc giết nó bằng kill $!(hãy thận trọng, nó sẽ giết quá trình cuối cùng được khởi chạy trong nền).
  7. Để xóa màn hình đã tạo, hãy gọi vnc4server -kill :1, trong đó thay vì :1bạn có thể đặt số của màn hình mới.

1
Cảm ơn vì x2x ... Tại sao không ai nhắc đến nó trên toàn bộ internet ??? Tiết kiệm cho tôi thời gian lớn. Synergy yêu cầu cyanogenmod hoặc tương tự trên máy tính bảng của bạn. Ngoài ra không ai đề cập đến nó.
Stefanos Kalantzis

1
Tôi đã biết x2x, tìm bài đăng này bằng cách tìm kiếm x2x android trên google ... Nhưng +1 cho .vnc/xstartup, đặc biệt cho unset DBUS_SESSION_BUS_ADDRESS!! Bài viết nhỏ nhưng phong phú và rất hữu ích, cảm ơn!
F. Hauri

7

Về nguyên tắc, điều này có thể sử dụng xdmx (X đa phân tán) cho phép bạn tạo một máy tính để bàn bằng cách sử dụng hai máy chủ X chạy trên các máy riêng biệt.

về nguyên tắc có thể có ba kịch bản, nhưng không có kịch bản nào liền mạch như iDisplay, vì tất cả chúng đều yêu cầu khởi động lại phiên X của bạn ít nhất. Tôi chưa thể hoạt động hoàn hảo, nhưng tôi đang chạy Ubuntu 10.10 và không thể nâng cấp vì nhiều lý do. Ba là:

1: chạy máy chủ X trên Android (hiện có hai máy chủ có sẵn trong cửa hàng ứng dụng) và sử dụng xdmx để kết hợp với màn hình máy tính để bàn hoặc máy tính xách tay của bạn. - không hoạt động với tôi vì xdmx bị sập khi con trỏ di chuyển đến phần máy tính bảng của máy tính để bàn.

2: chạy máy chủ X thứ hai với phụ trợ vnc trên máy tính của bạn, sử dụng xdmx để kết hợp nó vào một máy tính để bàn với màn hình máy tính của bạn, sau đó xem phần ảo với trình xem vnc trên máy tính bảng - không hoạt động với tôi vì xdmx yêu cầu tất cả các máy chủ x phải có hình ảnh màu giống nhau, đó không phải là trường hợp của vncserver và màn hình thực và tôi không thể thuyết phục vncserver thay đổi.

3: chạy hai vncservers, một cho mỗi màn hình, sau đó kết nối chúng với xdmx và xem từng phần với một vncviewer trên máy tương ứng. - Điều này đến gần nhất để làm việc cho tôi, không may inpout đã bị rối tung. Nó cũng khá chậm với màu sắc thật qua wifi. Tôi đã sử dụng tập lệnh này để bắt đầu xdmx và vncs:

#!/bin/sh 
vncserver :2 -geometry 1024x768 -depth 24 && \
vncserver :3 -geometry 1920x1120 -depth 24 && \
startx -- \
/usr/bin/X11/Xdmx :1 \
-input :2 \
-display :2 \
-display :3 \
-ignorebadfontpaths \
-norender \
-noglxproxy \
+xinerama \
-nomulticursor
vncserver -kill :2 
vncserver -kill :3

YMMV


3

Tôi đã tạo một tập lệnh bash đơn giản để làm cho máy tính bảng hiển thị lần thứ hai. Sao chép ipad_monitor.sh(Đừng lo lắng. Nó cũng hoạt động với Android) trong bài đăng trên blog của tôi .

Điều khác biệt so với bài đăng khác là bạn có thể đặt vị trí của màn hình thứ hai với đối số bổ sung rất dễ dàng.

Chỉnh sửa: Tôi bao gồm bản gốc ipad_monitor.shở đây. chạy lệnh này như:

  • ./ipad_monitor.sh --right hoặc là ./ipad_monitor.sh --left
  • ./ipad_monitor.sh --right --portrait
  • ./ipad_monitor.sh --right --portrait --hidpi

Ý tưởng cơ bản của kịch bản này cũng giống như các kịch bản khác, đang chạy xrandrx11vncnhưng tôi đã bao gồm các tùy chọn như bạn muốn gắn màn hình bên nào.

#!/bin/sh
# ----------------------------------------------------------------------------
# "THE BEER-WARE LICENSE" (Revision 42):
# <k.bumsik@gmail.com> wrote this file. As long as you retain this notice you
# can do whatever you want with this stuff. If we meet some day, and you think
# this stuff is worth it, you can buy me a beer in return. - Bumsik Kim
# ----------------------------------------------------------------------------

# Configuration
WIDTH=1024  # 1368 for iPad Pro
HEIGHT=768  # 1024 for iPad Pro
MODE_NAME="mode_ipad"       # Set whatever name you like, you may need to change
                            # this when you change resolution, or just reboot.
DIS_NAME="VIRTUAL1"         # Don't change it unless you know what it is
RANDR_POS="--right-of"      # Default position setting for xrandr command

# Parse arguments
while [ "$#" -gt 0 ]; do
  case $1 in
    -l|--left)      RANDR_POS="--left-of"  ;;
    -r|--right)     RANDR_POS="--right-of" ;;
    -a|--above)     RANDR_POS="--above"    ;;
    -b|--below)     RANDR_POS="--below"    ;;
    -p|--portrait)  TMP=$WIDTH; WIDTH=$HEIGHT; HEIGHT=$TMP
                    MODE_NAME="$MODE_NAME""_port"  ;;
    -h|--hidpi)     WIDTH=$(($WIDTH * 2)); HEIGHT=$(($HEIGHT * 2))
                    MODE_NAME="$MODE_NAME""_hidpi" ;;
    *) echo "'$1' cannot be a monitor position"; exit 1 ;;
  esac
  shift
done

# Detect primary display
PRIMARY_DISPLAY=$(xrandr | perl -ne 'print "$1" if /(\w*)\s*connected\s*primary/')

# Add display mode
RANDR_MODE=$(cvt "$WIDTH" "$HEIGHT" 60 | sed '2s/^.*Modeline\s*\".*\"//;2q;d')
xrandr --addmode $DIS_NAME $MODE_NAME 2>/dev/null
# If the mode doesn't exist then make mode and retry
if ! [ $? -eq 0 ]; then
  xrandr --newmode $MODE_NAME $RANDR_MODE
  xrandr --addmode $DIS_NAME $MODE_NAME
fi

# Show display first
xrandr --output $DIS_NAME --mode $MODE_NAME
# Then move display
sleep 5 # A short delay is needed. Otherwise sometimes the below command is ignored.
xrandr --output $DIS_NAME $RANDR_POS $PRIMARY_DISPLAY

# Cleanup before exit
function finish {
  xrandr --output $DIS_NAME --off 
  xrandr --delmode $DIS_NAME $MODE_NAME
  echo "Second monitor disabled."
}

trap finish EXIT

# Get the display's position
CLIP_POS=$(xrandr | perl -ne 'print "$1" if /'$DIS_NAME'\s*connected\s*(\d*x\d*\+\d*\+\d*)/')
echo $CLIP_POS
# Share screen
x11vnc -multiptr -repeat -clip $CLIP_POS
# Possible alternative is x0vncserver but it does not show the mouse cursor.
#   x0vncserver -display :0 -geometry $DIS_NAME -overlaymode -passwordfile ~/.vnc/passwd
if ! [ $? -eq 0 ]; then
  echo x11vnc failed, did you \'apt-get install x11vnc\'?
fi

1
Bạn có tên cho tập lệnh / ứng dụng hoặc bất kỳ liên kết thay thế nào mà bạn có thể đăng để giúp tránh thối liên kết không? Ở đây, chúng tôi thường cố gắng khép kín hết mức có thể để không phụ thuộc vào các trang web khác, đặc biệt nếu các trang web đó chứa phần lớn thông tin có liên quan đến câu trả lời mà thông tin đó không thực sự được đưa vào câu trả lời .
sbergeron

Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi. - Từ đánh giá
nặc

2
@sbergeron tôi thấy. Tôi bao gồm mã gốc ở đây.
Bumsik Kim

1
@ nặc danh2 Bạn nói đúng. Tôi đã bao gồm mã bash ở đây.
Bumsik Kim

Ah, tốt hơn nhiều. Tôi nghĩ rằng điều này sẽ có thể dính xung quanh như thế này.
nặc

2

Tôi sử dụng trình điều khiển giả xorg và x11vnc -clip. Điểm chuột không bị kẹt ở cạnh.

sudo apt-get install xserver-xorg-video-dummy

/etc/X11/xorg.conftrình điều khiển giả trên màn hình thứ hai:

Mục "Thiết bị"
        Định danh "Thiết bị video được định cấu hình"
    Trình điều khiển "radeon" #CHANGE NÀY
Kết thúc

Mục "Giám sát"
        Định danh "Màn hình được cấu hình"
Kết thúc

Mục "Màn hình"
        Định danh "Màn hình mặc định"
        Màn hình "Màn hình được cấu hình"
        Thiết bị "Thiết bị video được định cấu hình"
Kết thúc


## Xdummy: ##
Mục "Thiết bị"
  Định danh "Videocard0"
  Tài xế "giả"
  #VideoRam 4096000
  VideoRam 256000
Kết thúc

## Xdummy: ##
Mục "Giám sát"
  Định danh "Monitor0"
# HorizSync 10.0 - 300.0
# VertRefresh 10.0 - 200.0
# Hiển thị Kích thước 4335 1084
Kết thúc

## Xdummy: ##
Mục "Màn hình"
  Mã định danh "Screen0"
  Thiết bị "Videocard0"
  Giám sát "Màn hình0"
Kết thúc



Mục "ServerLayout"
  Định danh "dummy_layout"
  Màn hình 0 "Màn hình mặc định"
  Màn hình 1 "screen0" bên phải "Màn hình mặc định"
    Tùy chọn "Xinerama" "1"
Kết thúc

Sau đó đăng nhập vào phiên X và chạy:

x11vnc -clip 1024x768+1280+0

Bất kỳ cách nào để làm điều này mà không có xorg.conf? Nếu tôi tạo một cái trên máy tính thì đồ họa của tôi sẽ hoàn toàn bị rối tung.
daboross

Xinerama vẫn được hỗ trợ? Thế còn xrandr?
Gringo Suave

1

Các hướng dẫn này là tạo màn hình "bổ sung" cho máy linux của bạn bằng máy tính bảng hoặc bất kỳ máy tính nào thông qua máy khách VNC.

Tôi đã thực hiện các bước này trong Mageia3 32Bit (chưa thử 64 bit) nhưng cũng tương tự đối với các bản phát hành khác (ví dụ: Ubuntu).

Đảm bảo rằng bạn có tất cả các gói cần thiết với lệnh đầu cuối sau:

sudo apt-get install gcc autoconf automake x11-font-util libtool libxi-devel ibopenssl-devel libxfont1-devel libpam-devel x11-util-macros x11-xtrans-devel x11-server-xvfb x11-server-xdmx x11-server-devel x11-server-source

Khi bạn có tất cả các gói trên, hãy đưa ra các lệnh sau:

cd /usr/share/x11-server-sources/
./autogen.sh
./configure --with-fontrootdir=/usr/share/fonts --with-xkb-path=/usr/share/X11/xkb --with-xkb-output=/usr/share/X11/xkb/compiled --enable-dmx
make

Nếu bạn không gặp phải bất kỳ lỗi nào, hãy vá Xdmx (chỉ cần đặt, nó đã bị "hỏng" một thời gian):

mở /usr/share/x11-server-sources/hw/dmx/input/dmxevents.cvà thay đổi dòng 730: thay đổi điều này:

POINTER_ABSOLUTE | POINTER_SCREEN, &mask);

đến đây:

POINTER_RELATIVE | POINTER_DESKTOP, &mask);

Dòng IF khác nhau, sử dụng phần này để tìm dòng chính xác: Phần gốc - dòng để thay đổi được đánh dấu bằng *

    case ButtonPress:
    case ButtonRelease:
        detail = dmxGetButtonMapping(dmxLocal, detail);
        valuator_mask_zero(&mask);
        QueuePointerEvents(p, type, detail,
 *                         POINTER_RELATIVE | POINTER_DESKTOP, &mask);
        return;

Kiểm tra phiên bản Xdmx của bạn bằng cách chạy ./configure --versiontrong /usr/share/x11-server-source/, đối với Xdmx 1.13 trở lên, bạn cũng phải thực hiện các thay đổi này (đối với 1.14 và mới hơn, bạn có thể bỏ qua bước "thực hiện" bên dưới):

mở /usr/share/x11-server-sources/dix/getevents.c, dòng 1395: thay đổi điều này:

if (flags & POINTER_SCREEN ) {    /* valuators are in screen coords */

Về điều này:

if (flags & ( POINTER_SCREEN | POINTER_DESKTOP) ) {    /* valuators are in screen coords */

(Phần gốc - dòng để thay đổi được đánh dấu bằng *)

    /* valuators are in driver-native format (rel or abs) */

    if (flags & POINTER_ABSOLUTE) {
*       if (flags & POINTER_SCREEN ) {    /* valuators are in screen coords */
            sx = valuator_mask_get(&mask, 0);
            sy = valuator_mask_get(&mask, 1);

mở /usr/share/x11-server-sources/Xext/xtest.c, dòng 311: thay đổi điều này:

flags = POINTER_ABSOLUTE | POINTER_SCREEN;

đến đây:

flags = POINTER_ABSOLUTE | POINTER_DESKTOP;

(phần gốc - dòng để thay đổi được đánh dấu bằng *)

       case MotionNotify:
            dev = PickPointer(client);
            valuators[0] = ev->u.keyButtonPointer.rootX;
            valuators[1] = ev->u.keyButtonPointer.rootY;
            numValuators = 2;
            firstValuator = 0;
            if (ev->u.u.detail == xFalse)
*               flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
            break;

/usr/share/x11-server-sources/include/input.h, dòng 73: Thêm dòng này sau dòng bắt đầu bằng #define POINTER_EMULATED:

#define POINTER_DESKTOP         (1 << 7)

Sau khi thực hiện các thay đổi ở trên, thực hiện lại (trong /usr/share/x11-server-sources/):

make

Bạn nên có một tệp Xdmx mới /usr/share/x11-server-sources/hw/dmx/. Chúng tôi cần cài đặt nó trên toàn cầu để dễ dàng, vì vậy tôi khuyên bạn nên đổi tên của bạn hiện có:

sudo mv /bin/Xdmx /bin/Xdmx-old

và sao chép cái mới thay cho nó:

cp /usr/share/x11-server-sources/hw/dmx/Xdmx /bin

Bây giờ bạn đã sẵn sàng để thực hiện bản dùng thử đầu tiên của mình, các lệnh sau cho phép bạn giữ cho màn hình chính / hiện có ( :0) của bạn chạy và mở một màn hình mới với sự hỗ trợ đa màn hình. Tôi đang sử dụng icewm với các lệnh này để làm cho nó nhẹ hơn một chút (Tôi sử dụng KDE trên màn hình chính của mình :0và mở bất kỳ ứng dụng đa màn hình lớn nào trong màn hình đa đầu mới). Bạn chắc chắn có thể kịch bản các lệnh này để dễ sử dụng (đó là những gì tôi đã làm) - Bất kỳ lệnh nào trong số này có thể được thực thi trên bàn điều khiển và / hoặc cửa sổ đầu cuối của bất kỳ màn hình nào, yêu cầu duy nhất là chúng được thực hiện theo thứ tự.

Lệnh này tạo màn hình mới của bạn dưới dạng bộ đệm khung cho màn hình VNC của bạn :2(điều chỉnh kích thước màn hình theo ý muốn):

Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &

Điều này bắt đầu một phiên X nhẹ mới trên màn hình vật lý của bạn dưới dạng màn hình :1(có nhiều cách khác nhau để làm điều này):

startx 'icewm' -- :1

Lệnh này bắt đầu đa màn hình giữa màn hình vật lý của bạn và màn hình ảo và khởi động icewm cho trình quản lý cửa sổ:

Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm

Bây giờ hãy mở một cửa sổ đầu cuối và khởi động máy chủ vnc (thay đổi mật khẩu theo ý muốn):

x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &

Điều duy nhất còn lại phải làm bây giờ là kích hoạt ứng dụng khách VNC của bạn và kết nối với VNC của bạn - bạn có thể cần phải vô hiệu hóa hoặc thêm một ngoại lệ vào tường lửa của mình vào cổng 5900 để bạn có thể kết nối với nó. Một lưu ý khác là một số khách hàng của VNC không hiển thị vị trí con trỏ từ xa, tôi xác nhận rằng "Mocha VNC" cho iOS hoạt động rất tốt nếu bạn tắt tùy chọn "chuột cục bộ".

Tận hưởng việc kéo các cửa sổ giữa màn hình chính và màn hình thứ hai ảo mới của bạn (đồng thời có thể sử dụng máy tính bảng để nhấp / nhập vào những thứ trong màn hình thứ hai).

Để đóng Xdmx nhấn Ctrl+ Alt+ Backspacehai lần.

Tự động hóa:

Tôi sử dụng tập lệnh bash này để bắt đầu toàn bộ quá trình (cũng giết chết Xvfb khi thoát):

Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
xinit dual -- :1
ps | grep Xvfb | awk '{print $1}' | xargs kill

Sau đó, tôi có một ~/.xinitrctập tin tùy chỉnh với điều này:

#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)

if [[ $1 == "" ]]
then
  exec startkde 
elif [[ $1 == "xterm" ]]
then
  exec xterm
elif [[ $1 == "dual" ]]
then
  exec Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm & x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe
else
  exec $1
fi

Xử lý sự cố:

  • Khi chạy Xdmx nếu bạn gặp lỗi cho biết sh: /usr/local/bin/xkbcomp: No such file or directorybạn có thể cần phải thực thi : cd /usr/local/bin" and "ln -s /bin/xkbcomp, sau đó thử lại Xdmx.

  • Ctrl+ Alt+ F1thông qua F7được cho là hoạt động trong Xdmx để chuyển sang các bảng điều khiển / xsairs khác nhưng vì lý do nào đó nó không hoạt động, những gì tôi làm chỉ đơn giản là thực thi sudo chvt X(trong đó X là số console / xsession) để chuyển sang màn hình chính của tôi. Ngoài ra, khi bạn quay trở lại Xdmx, bạn có thể gặp một số vấn đề về bản vẽ trên bất kỳ cửa sổ đang mở nào, tôi chỉ cần nhấp vào thanh tác vụ để ẩn / hiển thị lại cửa sổ buộc phải vẽ lại.


0

Cảm ơn các bạn đã hướng dẫn, tôi sẽ chia sẻ những gì hiệu quả với tôi trên Ubuntu 14.04

Tải AndroidVNC tại đây cho máy tính bảng của bạn

Nhận x11vnc cho máy tính Ubuntu của bạn bằng cách chạy

sudo apt-get install x11vnc

Tôi đã phải sử dụng phương pháp trình điều khiển giả Xorg. Đây là tệp /etc/X11/xorg.conf của tôi trông như thế nào:

Section "ServerLayout"
Identifier     "X.org Configured"
Screen      0  "Screen0" 0 0
**Screen        1  "Screen1" rightof "Screen0"**
InputDevice    "Mouse0" "CorePointer"
InputDevice    "Keyboard0" "CoreKeyboard"
**Option         "Xinerama" "1"**
EndSection

Section "Files"
ModulePath   "/usr/lib/xorg/modules"
FontPath     "/usr/share/fonts/X11/misc"
FontPath     "/usr/share/fonts/X11/cyrillic"
FontPath     "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath     "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath     "/usr/share/fonts/X11/Type1"
FontPath     "/usr/share/fonts/X11/100dpi"
FontPath     "/usr/share/fonts/X11/75dpi"
FontPath     "built-ins"
EndSection

Section "Module"
Load  "glx"
EndSection

Section "InputDevice"
Identifier  "Keyboard0"
Driver      "kbd"
EndSection

Section "InputDevice"
Identifier  "Mouse0"
Driver      "mouse"
Option      "Protocol" "auto"
Option      "Device" "/dev/input/mice"
Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
Identifier   "Monitor0"
VendorName   "Monitor Vendor"
ModelName    "Monitor Model"
DisplaySize 1680 1050
EndSection

**Section "Monitor"
Identifier "Monitor1"
VendorName "Dummy"
ModelName "Dummy"
DisplaySize 2704 1050
EndSection**

Section "Device"
    ### Available Driver options are:-
    ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
    ### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
    ### <percent>: "<f>%"
    ### [arg]: arg optional
    #Option     "NoAccel"               # [<bool>]
    #Option     "SWcursor"              # [<bool>]
    #Option     "EnablePageFlip"        # [<bool>]
    #Option     "ColorTiling"           # [<bool>]
    #Option     "ColorTiling2D"         # [<bool>]
    #Option     "RenderAccel"           # [<bool>]
    #Option     "SubPixelOrder"         # [<str>]
    #Option     "AccelMethod"           # <str>
    #Option     "EXAVSync"              # [<bool>]
    #Option     "EXAPixmaps"            # [<bool>]
    #Option     "ZaphodHeads"           # <str>
    #Option     "EnablePageFlip"        # [<bool>]
    #Option     "SwapbuffersWait"       # [<bool>]
Identifier  "Card0"
Driver      "radeon"
BusID       "PCI:1:0:0"
EndSection

**Section "Device"
  Identifier "Dummy"
  Driver "dummy"
EndSection**

Section "Screen"
Identifier "Screen0"
Device     "Card0"
Monitor    "Monitor0"
SubSection "Display"
    Viewport   0 0
    Depth     1
EndSubSection
SubSection "Display"
    Viewport   0 0
    Depth     4
EndSubSection
SubSection "Display"
    Viewport   0 0
    Depth     8
EndSubSection
SubSection "Display"
    Viewport   0 0
    Depth     15
EndSubSection
SubSection "Display"
    Viewport   0 0
    Depth     16
EndSubSection
SubSection "Display"
    Viewport   0 0
    Depth     24
EndSubSection
EndSection

**Section "Screen"
Identifier "Screen1"
Device "Dummy"
Monitor "Monitor1
EndSection**

Bạn có thể không cần tất cả mọi thứ trong đó, chỉ cần chạy X-hình để nhận autoconfig hệ thống của bạn và thêm các phần giả (thứ nằm giữa các dấu hoa thị) vào tệp của bạn. Độ phân giải cho màn hình giả trong xorg.conf phải là chiều rộng màn hình chính + chiều rộng độ phân giải của máy tính bảng của bạn, trong trường hợp của tôi 1680 + 1024 = 2704 giữ chiều cao màn hình chính của bạn, 1050 trong trường hợp của tôi. phù hợp với bạn hơn :).

Chạy x11vnc bằng cách làm

x11vnc -rfbauth ~/.vnc/passwd -clip 1024x550+1680+0

Ở đây độ phân giải phải là chiều rộng máy tính bảng của bạn x chiều cao máy tính bảng + Chiều rộng màn hình chính + 0

Kết nối với Pc của bạn bằng ứng dụng khách androidVNC, đảm bảo bật tùy chọn localmouse. Đó là nó, bây giờ cảm thấy sự kỳ lạ của việc có linux chạy trên Android :)


0

Tôi đã có rất nhiều vấn đề với các kỹ thuật khác được liệt kê ở đây. Tôi ước tôi có một giải pháp tốt hơn, nhưng giải pháp chậm và đơn giản của tôi là một khởi đầu tốt.

Đối với máy chủ VNC, tôi đã thử vncservergói nhưng màn hình sẽ tối đen và tôi phải khởi động lại gdmđể mọi thứ hoạt động trở lại. Tôi chuyển sang tightvncservervà nó hoạt động lần đầu tiên không có cấu hình.

Để chia sẻ chuột / bàn phím giữa các màn hình tôi đã sử dụng x2vnc . Điều này cũng có thể được sử dụng với win2vnc để chia sẻ chuột / bàn phím với PC Windows bên cạnh PC Linux của bạn.

Lệnh cuối cùng:

sudo apt-get install tightvncserver
tightvncserver
sudo apt-get install x2vnc
x2vnc -east localhost:1

Tại thời điểm này, bạn sẽ có thể mở màn hình thứ hai trong chương trình VNC bằng cách kết nối với YOUR_IP_ADDRESS:1. Để bắt đầu một chương trình trên màn hình VNC, hãy mở một thiết bị đầu cuối, thiết lập DISPLAYvà sau đó chạy lệnh. Ví dụ: để mở xtermtrên "màn hình" VNC, hãy chạy:

export DISPLAY=:1
xterm

Sử dụng phương pháp này màn hình thứ hai khá chậm. Tuy nhiên, rất nhiều tùy chọn khác mà tôi đã thử chạy vào ngõ cụt và cái này hoạt động không có cấu hình nào cả.


0

Đối với bất cứ ai vẫn thắc mắc về chủ đề này: clip xrandr và x11vnc không hoạt động; để cho phép chuột vượt qua đó, bạn cần sử dụng đối số xoay để đặt khu vực theo dõi chuột:

xrandr --fb 2560x1024 --output LVDS1 --panning 1280x1024+0+0/2560x1024+0+0

Sau đó khi chạy xvnc sử dụng:

x11vnc -clip 1280x1024+1281+0 -nocursorshape -nocursorpos

Điều đó ngăn VNC cố gắng sử dụng theo dõi con trỏ của chính nó và vẽ con trỏ như một phần của hình ảnh màn hình.

Tôi đã ghi chú ở đây http://mikecodeoddities.blogspot.ae/2015/04/android-tablet-as-second-ubfox-screen.html


0

TL; DR :

    $ sudo apt-get install x11vnc
    $ WINDOW_ID=$(xwininfo | awk '/Window.id/{print $4}') && x11vnc -viewonly -nopw -avahi -id $WINDOW_ID >/dev/null 2>&1 &

Bây giờ, chỉ cần nhấp vào cửa sổ bạn muốn chia sẻ.


đẦY ĐỦ :

Tôi có một chiếc iPad và Chromebook và tôi muốn sử dụng chúng như màn hình của tôi, chỉ để Uso một số lệnh Terminal htop, iptstate, nmon, vv. Vì vậy, tôi là kẻ lười biếng và sử dụng nó:

  1. Gói instalation: sudo apt-get install x11vnc
  2. Mở một số thiết bị đầu cuối và đặt xwininfo | awk '/Window.id/{print $4}'và nhấp vào cửa sổ bạn muốn chia sẻ. Đầu ra sẽ giống như:

    $ xwininfo | awk '/Window.id/{print $4}'
    0x4402f34
    
  3. Bây giờ bạn có thể bắt đầu x11vncphiên của mình :

    $ x11vnc -viewonly -nopw -avahi -id 0x4402f34 >/dev/null 2>&1 &
    
  4. Thay đổi kích thước cửa sổ (0x4402f34) để có hình ảnh tốt nhất có thể.

Tâm liên quan đến cổng của bạn phiên : 5900 -> :0, 5901 -:1, 5902 -> :2...

Bên cạnh đó, hoạt động tốt với các ứng dụng X11: Firefox, OpenOffice, v.v.


0

Sử dụng vnc_virtual_display_linker

Công cụ thiết lập một màn hình ảo thứ hai để kết nối với VNC như được mô tả trong nhiều câu trả lời trước đó. Nó thậm chí còn hỗ trợ các kết nối từ các thiết bị Android bằng cáp USB.

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.