- clipscreen เป็นแอปพลิเคชัน X11 แบบเรียบง่ายที่สร้าง จอภาพเสมือน เพื่อมิเรอร์พื้นที่เฉพาะของหน้าจอ และแสดงพื้นที่นั้นด้วยกรอบสี่เหลี่ยมสีเขียว
- ในเครื่องมือแชร์หน้าจออย่าง Google Meet, Microsoft Teams และ Jitsi Meet สามารถแชร์ จอภาพเสมือน นี้แทนการแชร์ทั้งหน้าจอหรือแชร์ทีละหน้าต่างได้
- เพียงย้ายหน้าต่างที่ต้องการแชร์เข้าไปในกรอบสีเขียว จึงช่วยลดความจำเป็นในการแชร์หลายหน้าต่างแยกกันหรือสลับเป้าหมายการแชร์ไปมา
- การรันใช้รูปแบบ
./clipscreen <width>x<height>+<x>+<y> และหากใช้ร่วมกับ hacksaw หรือ slop ก็สามารถ เลือกพื้นที่แบบโต้ตอบ ได้
- ทดสอบแล้วเฉพาะบน Linux และ xorg เท่านั้น และไม่รับประกันว่าจะทำงานได้บนระบบอื่น
clipscreen ทำอะไร
- clipscreen เป็นแอปพลิเคชันที่สร้างจอภาพเสมือนเพื่อทำสำเนาบางส่วนของหน้าจอ
- พื้นที่หน้าจอที่กำหนดจะถูกเน้นด้วย กรอบสี่เหลี่ยมสีเขียว
- ผู้ใช้สามารถแชร์จอภาพเสมือนนี้ผ่านเครื่องมือแชร์หน้าจอในการประชุมวิดีโอตามปกติได้
- ตัวอย่าง: Google Meet
- Microsoft Teams
- Jitsi Meet
วิธีการแชร์หน้าจอ
- แทนที่จะแชร์ทั้งหน้าจอหรือแชร์ทีละหน้าต่าง ให้แชร์ จอภาพเสมือน ที่ clipscreen สร้างขึ้น
- หน้าต่างที่ต้องการแชร์เพียงย้ายเข้าไปในกรอบสีเขียว
- เป็นวิธีที่ช่วยให้ไม่ต้องคอยสลับหน้าต่างที่แชร์อยู่ตลอดเวลาเมื่อทำงานกับหลายหน้าต่าง
ข้อกำหนดในการบิลด์
- ระบบต้องมีสิ่งต่อไปนี้
-
ไลบรารีพัฒนา X11
- ไลบรารีกราฟิก Cairo
- คอมไพเลอร์ภาษา C เช่น
gcc
- บน Ubuntu 24.04 สามารถติดตั้งไลบรารีที่จำเป็นได้ด้วยคำสั่งต่อไปนี้
apt-get install libx11-dev xserver-xorg-dev xorg-dev libcairo2-dev gcc
- รันการบิลด์ด้วยคำสั่งต่อไปนี้
make
- แอปพลิเคชันทดสอบแล้วเฉพาะบน **Linux และ xorg** เท่านั้น และยังไม่แน่ชัดว่าจะทำงานได้บนระบบอื่นหรือไม่
วิธีใช้งาน
- เรียกใช้ไฟล์ปฏิบัติการที่คอมไพล์แล้วด้วยรูปแบบต่อไปนี้
./clipscreen <width>x<height>+<x>+<y>
- อาร์กิวเมนต์จะกำหนดตำแหน่งและขนาดของโอเวอร์เลย์กับจอภาพเสมือน
<width>: ความกว้างของโอเวอร์เลย์และจอภาพเสมือน
<height>: ความสูงของโอเวอร์เลย์และจอภาพเสมือน
<x>: พิกัด x ของมุมซ้ายบนของโอเวอร์เลย์และจอภาพเสมือน
<y>: พิกัด y ของมุมซ้ายบนของโอเวอร์เลย์และจอภาพเสมือน
- ตัวอย่างมีดังนี้
./clipscreen 800x600+100+100
- คำสั่งนี้จะสร้างหน้าต่างโอเวอร์เลย์ขนาด 800x600 โดยเริ่มที่ตำแหน่ง
(100, 100) ของหน้าจอ
การเลือกพื้นที่แบบโต้ตอบและการปิดโปรแกรม
- หากต้องการเลือกพื้นที่แบบโต้ตอบ สามารถรันร่วมกับ
hacksaw หรือ slop ได้
./clipscreen $(hacksaw)
./clipscreen $(slop)
- เครื่องมือที่เกี่ยวข้อง
- หากต้องการออก ให้กด Ctrl+C ในเทอร์มินัลที่แอปพลิเคชันกำลังรันอยู่
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
เลยใช้ส่วนขยาย xrandr เพื่อมิเรอร์พื้นที่เฉพาะเป็น จอเสมือน แล้วสร้างเครื่องมือเล็ก ๆ ที่แชร์จอเสมือนนั้นได้
รายละเอียดอยู่ในบล็อกโพสต์: https://www.splitbrain.org/blog/2024-10/11-introducing_clips...
ใช้แบบนี้เป็นสภาพแวดล้อมสำหรับเดโม: https://gist.github.com/radupotop/d77a47767e2e65a7e7d40d1ea8...
sleep(100)จนกว่าจะได้รับ SIGINTด้วยเหตุนี้อาจทำให้ใช้ CPU สูงโดยไม่มีเหตุผลนัก
ถ้าจบการทำงานด้วยวิธีที่ไม่ใช่ SIGINT อาจเหลือ output เสมือนไว้และหน้าต่าง overlay หายไป ซึ่งดูแปลกนิดหน่อย แต่ไม่ใช่ปัญหาใหญ่ อย่างไรก็ตาม ไม่ควรมองจำนวนบรรทัดของโค้ดเป็นตัวชี้วัดคุณภาพหรือความสง่างามมากเกินไป
วิธีนี้ทำบน Wayland แบบตรง ๆ ไม่ได้ แต่บน Wayland อาจไม่จำเป็นต้องใช้เครื่องมือนี้ตั้งแต่แรกด้วยซ้ำ วิธีมาตรฐานสำหรับโปรเซสที่ไม่มีสิทธิ์ในการจับภาพหน้าจอคือ desktop portal และอย่างน้อย KDE ก็รองรับตัวเลือกการจับภาพหลากหลาย รวมถึงการจับภาพสี่เหลี่ยมบนหน้าจอ แม้กำลังรันแอป X.org อยู่ก็น่าจะทำได้ด้วย XWaylandVideoBridge
การที่ D-Bus ถูกใช้ไปทั่วไม่ค่อยน่ายินดีนัก แต่ข้อดีคือถ้าเปลี่ยน implementation ของ
org.freedesktop.impl.portal.ScreenCastก็แทบจะแทนพฤติกรรมการจับภาพหน้าจอที่ต้องการได้ เห็นว่าเป็นแนวทางที่ดีกว่าการให้แต่ละแอปไป implement ฟังก์ชันเลือกเป้าหมายการจับภาพกันเองไม่ได้หมายความว่า X11 ไม่ดีหรือไม่เท่สำหรับการแฮ็ก แต่ถ้าไม่อยากสมมติว่าผู้ใช้จะใช้อย่างสมบูรณ์แบบ โค้ดก็จะบวมและซับซ้อนขึ้น และจะแข็งแรงขึ้นตามนั้น
ตัวอย่างเช่น ลองรัน
./clipscreen 1 2 3 4ดูก็ได้ถ้าอยากลองเล่นอะไรสักอย่างก็ทำได้ทันที ICCCM เคยโดนด่าอย่างหนักช่วงต้นยุค 90 แต่ฝั่งอื่นไม่มีสิ่งที่เทียบเท่ากัน และทุกวันนี้ในพื้นที่ window manager ก็ยังมีการทดลองใหม่ ๆ ออกมาเรื่อย ๆ
xrandr --setmonitor screenshare 2560/1x1440/1+0+0 nonegeo=$(slop -f '%w/1x%h/1+%x+%y') && xrandr --setmonitor screenshare "$geo" noneแต่ก็เป็นคำสั่งบรรทัดเดียวที่เจ๋งดี
แบบนั้นจะรู้ได้ว่าขนาดหน้าต่างเหมาะให้คนอื่นดูบนโน้ตบุ๊กหรือไม่ และพรีวิวจะตามเมาส์ไปพร้อมปรับระดับการซูมกับขอบเขตของเมาส์ได้ทันที
หน้าต่างพรีวิว OBS เปิดได้ตอนเริ่มโดยไม่ต้องมีหน้าต่าง OBS หลัก ดังนั้นหลังจากนั้นก็ไม่ต้องดูหรือควบคุมหน้าต่าง OBS หลักหรือแอปอีกเลย ทำให้รู้สึกเหมือนเป็นเครื่องมือ standalone ดี
https://github.com/BlankSourceCode/obs-zoom-to-mouse
Rectangular Region แชร์บางส่วนของหน้าจอที่เลือกได้ ส่วน New Virtual Output จะสร้างหน้าจอเสมือนที่มองเห็นได้ใน KDE Display Configuration ทันที หน้าจอเสมือนนี้อาจถูกวางซ้อนบนจอจริงเดิมหรือไม่ก็ได้