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.c
và 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 --version
trong /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 :0
và 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 ~/.xinitrc
tậ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 directory
bạ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.