คำแนะนำเหล่านี้คือการสร้างหน้าจอ "เพิ่มเติม" สำหรับเครื่อง linux ของคุณโดยใช้แท็บเล็ตหรือคอมพิวเตอร์ใด ๆ ผ่านไคลเอนต์ VNC
ฉันทำขั้นตอนเหล่านี้ใน Mageia3 32Bit (ยังไม่ได้ลอง 64 บิต) แต่ควรคล้ายกับ distros อื่นเช่นกัน (เช่น Ubuntu)
ตรวจสอบให้แน่ใจว่าคุณมีแพ็คเกจที่จำเป็นทั้งหมดด้วยคำสั่งเทอร์มินัลต่อไปนี้:
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
เมื่อคุณมีแพ็คเกจทั้งหมดข้างต้นแล้วให้ออกคำสั่งเหล่านี้:
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
หากคุณไม่ได้รับข้อผิดพลาดใด ๆ แพทช์ Xdmx (เพียงแค่ใส่มันได้รับ "เสีย" บางครั้ง):
เปิด/usr/share/x11-server-sources/hw/dmx/input/dmxevents.c
และเปลี่ยนบรรทัด 730: เปลี่ยนสิ่งนี้:
POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
สำหรับสิ่งนี้:
POINTER_RELATIVE | POINTER_DESKTOP, &mask);
หากบรรทัด 730 แตกต่างกันให้ใช้ส่วนนี้เพื่อค้นหาบรรทัดที่ถูกต้อง: ส่วนเดิม - บรรทัดเพื่อเปลี่ยนที่มีเครื่องหมาย *
case ButtonPress:
case ButtonRelease:
detail = dmxGetButtonMapping(dmxLocal, detail);
valuator_mask_zero(&mask);
QueuePointerEvents(p, type, detail,
* POINTER_RELATIVE | POINTER_DESKTOP, &mask);
return;
ตรวจสอบรุ่นของ Xdmx โดยการทำงาน./configure --version
ใน/usr/share/x11-server-source/
สำหรับXdmx 1.13และเก่าที่คุณยังมีเพื่อให้การเปลี่ยนแปลงเหล่านี้ (สำหรับ 1.14 และใหม่กว่าคุณสามารถข้ามไปยัง "ให้" ขั้นตอนด้านล่าง):
open /usr/share/x11-server-sources/dix/getevents.c
, line 1395: เปลี่ยนสิ่งนี้:
if (flags & POINTER_SCREEN ) { /* valuators are in screen coords */
สำหรับสิ่งนี้:
if (flags & ( POINTER_SCREEN | POINTER_DESKTOP) ) { /* valuators are in screen coords */
(ส่วนต้นฉบับ - บรรทัดที่จะเปลี่ยนมีเครื่องหมาย *)
/* 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);
open /usr/share/x11-server-sources/Xext/xtest.c
, line 311: เปลี่ยนแปลงสิ่งนี้:
flags = POINTER_ABSOLUTE | POINTER_SCREEN;
สำหรับสิ่งนี้:
flags = POINTER_ABSOLUTE | POINTER_DESKTOP;
(ส่วนเดิม - บรรทัดที่ต้องการเปลี่ยนที่มีเครื่องหมาย *)
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
บรรทัดที่ 73: เพิ่มบรรทัดนี้หลังจากบรรทัดที่ขึ้นต้นด้วย#define POINTER_EMULATED
:
#define POINTER_DESKTOP (1 << 7)
หลังจากทำการเปลี่ยนแปลงข้างต้นแล้วให้เรียกใช้งานอีกครั้ง (ใน/usr/share/x11-server-sources/
):
make
คุณควรจะมีไฟล์ Xdmx /usr/share/x11-server-sources/hw/dmx/
ใหม่ เราจำเป็นต้องติดตั้งทั่วโลกเพื่อความสะดวกดังนั้นฉันขอแนะนำให้คุณเปลี่ยนชื่อไฟล์เดิม:
sudo mv /bin/Xdmx /bin/Xdmx-old
และคัดลอกใหม่แทนที่:
cp /usr/share/x11-server-sources/hw/dmx/Xdmx /bin
ตอนนี้คุณพร้อมที่จะทำการทดลองครั้งแรกของคุณแล้วคำสั่งต่อไปนี้จะช่วยให้คุณสามารถ:0
ใช้งานจอแสดงผลหลัก / ที่มีอยู่ ( ) และเปิดหน้าจอใหม่ด้วยการรองรับจอภาพหลายจอ ฉันใช้ icewm กับคำสั่งเหล่านี้เพื่อทำให้มีน้ำหนักเบาขึ้นเล็กน้อย (ฉันใช้ KDE บนจอแสดงผลหลักของฉัน:0
และเปิดแอปพลิเคชั่นจอภาพหลายจอขนาดใหญ่ในจอแสดงผลแบบหลายหัวใหม่) คุณสามารถสคริปต์คำสั่งเหล่านี้ได้อย่างแน่นอนเพื่อความสะดวกในการใช้งาน (เป็นสิ่งที่ฉันทำ) - คำสั่งใด ๆ เหล่านี้สามารถดำเนินการได้บนคอนโซลและ / หรือหน้าต่างเทอร์มินัลของจอแสดงผลใด ๆ
คำสั่งนี้สร้างจอแสดงผลใหม่ของคุณเป็นบัฟเฟอร์เฟรมสำหรับจอแสดงผล VNC ของคุณ:2
(ปรับขนาดหน้าจอตามต้องการ):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
สิ่งนี้จะเริ่มเซสชัน X น้ำหนักเบาใหม่บนจอแสดงผลทางกายภาพของคุณเป็นจอแสดงผล:1
(มีหลายวิธีในการทำเช่นนี้):
startx 'icewm' -- :1
คำสั่งนี้เริ่มต้นการแสดงผลหลายจอระหว่างหน้าจอแบบฟิสิคัลและหน้าจอเสมือนจริงและเริ่มต้นเพียงเล็กน้อยสำหรับตัวจัดการหน้าต่าง:
Xdmx :3 +xinerama -display :1 -display :2 -norender -noglxproxy -ac & DISPLAY=:3 starticewm
ตอนนี้เปิดหน้าต่างเทอร์มินัลแล้วเริ่มเซิร์ฟเวอร์ vnc (เปลี่ยนรหัสผ่านตามต้องการ):
x11vnc -display :3 -passwd test -clip xinerama1 -noshm -forever -nowireframe &
สิ่งเดียวที่ต้องทำตอนนี้คือการเพิ่ม VNC client ของคุณและเชื่อมต่อกับ VNC ของคุณ - คุณอาจต้องปิดการใช้งานหรือเพิ่มข้อยกเว้นไฟร์วอลล์ของคุณไปที่พอร์ต 5900 เพื่อให้คุณสามารถเชื่อมต่อกับมันได้ สิ่งที่ควรทราบอีกอย่างคือไคลเอนต์ VNC บางรายไม่แสดงตำแหน่งเคอร์เซอร์ระยะไกลฉันขอรับรองว่า "Mocha VNC" สำหรับ iOS ใช้งานได้ดีถ้าคุณปิดตัวเลือก "local mouse"
เพลิดเพลินไปกับการลากหน้าต่างระหว่างจอภาพหลักและจอภาพเสมือนใหม่ที่สองของคุณ (ในขณะที่ยังสามารถใช้แท็บเล็ตเพื่อคลิก / พิมพ์ในสิ่งต่าง ๆ ในจอภาพที่สอง)
หากต้องการปิด Xdmx กดCtrl+ Alt+ Backspaceสองครั้ง
ระบบอัตโนมัติ:
ฉันใช้สคริปต์ทุบตีนี้เพื่อเริ่มกระบวนการทั้งหมด (เช่นฆ่า Xvfb เมื่อออก):
Xvfb :2 +xinerama -screen 0 1024x1280x24 -ac &
xinit dual -- :1
ps | grep Xvfb | awk '{print $1}' | xargs kill
จากนั้นฉันมี~/.xinitrc
ไฟล์ที่กำหนดเองด้วยสิ่งนี้:
#!/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
การแก้ไขปัญหา:
เมื่อเรียกใช้ Xdmx หากคุณพบข้อผิดพลาดว่าsh: /usr/local/bin/xkbcomp: No such file or directory
คุณอาจต้องดำเนินการ: cd /usr/local/bin" and "ln -s /bin/xkbcomp
จากนั้นลอง Xdmx อีกครั้ง
Ctrl+ Alt+ F1ผ่านF7ควรจะทำงานใน Xdmx เพื่อสลับไปยังคอนโซลอื่น ๆ / xsessions แต่ด้วยเหตุผลบางอย่างมันไม่ได้ทำงานในสิ่งที่ผมทำคือเพียงแค่ดำเนินการsudo chvt X
(ที่ X คือจำนวนคอนโซล / Xsession) เพื่อเปลี่ยนเป็นหน้าจอหลักของฉัน นอกจากนี้เมื่อคุณเปลี่ยนกลับไปเป็น Xdmx คุณอาจพบปัญหาการวาดภาพในหน้าต่างที่เปิดอยู่ฉันเพียงคลิกที่แถบงานเพื่อซ่อน / แสดงหน้าต่างอีกครั้งเพื่อบังคับให้วาดใหม่