- clipscreen là một ứng dụng X11 đơn giản tạo ra một màn hình ảo phản chiếu một vùng cụ thể của màn hình và đánh dấu vùng đó bằng hình chữ nhật màu xanh lá
- Trong các công cụ chia sẻ màn hình như Google Meet, Microsoft Teams, Jitsi Meet, bạn có thể chia sẻ màn hình ảo thay vì toàn bộ màn hình hoặc từng cửa sổ riêng lẻ
- Chỉ cần di chuyển cửa sổ muốn chia sẻ vào trong viền xanh lá, nhờ đó giảm nhu cầu chia sẻ nhiều cửa sổ riêng lẻ hoặc chuyển đổi đối tượng chia sẻ
- Chạy theo dạng
./clipscreen <width>x<height>+<x>+<y>; khi dùng cùng hacksaw hoặc slop cũng có thể chọn vùng tương tác
- Chỉ mới được kiểm thử trên Linux và xorg, không bảo đảm hoạt động trên các hệ thống khác
clipscreen làm gì
- clipscreen là một ứng dụng tạo màn hình ảo sao chép một phần màn hình
- Vùng màn hình được chỉ định sẽ được làm nổi bật bằng hình chữ nhật màu xanh lá
- Người dùng có thể chia sẻ màn hình ảo này trong các công cụ chia sẻ màn hình thông thường của hội nghị video
- Ví dụ: Google Meet
- Microsoft Teams
- Jitsi Meet
Cách chia sẻ màn hình
- Thay vì chia sẻ toàn bộ màn hình hoặc từng cửa sổ riêng lẻ, hãy chia sẻ màn hình ảo do clipscreen tạo ra
- Chỉ cần di chuyển cửa sổ muốn chia sẻ vào trong viền xanh lá
- Đây là cách giúp không phải liên tục chuyển đổi cửa sổ chia sẻ khi làm việc với nhiều cửa sổ
Yêu cầu build
- Hệ thống cần các thành phần sau
-
Thư viện phát triển X11
- Thư viện đồ họa Cairo
- Trình biên dịch C, ví dụ:
gcc
- Trên Ubuntu 24.04, có thể cài đặt các thư viện cần thiết bằng lệnh sau
apt-get install libx11-dev xserver-xorg-dev xorg-dev libcairo2-dev gcc
- Build bằng lệnh sau
make
- Ứng dụng chỉ mới được kiểm thử trên **Linux và xorg**, chưa chắc hoạt động trên các hệ thống khác
Cách sử dụng
- Chạy tệp thực thi đã biên dịch theo định dạng sau
./clipscreen <width>x<height>+<x>+<y>
- Các đối số chỉ định vị trí và kích thước của overlay và màn hình ảo
<width>: chiều rộng của overlay và màn hình ảo
<height>: chiều cao của overlay và màn hình ảo
<x>: tọa độ x góc trên bên trái của overlay và màn hình ảo
<y>: tọa độ y góc trên bên trái của overlay và màn hình ảo
- Ví dụ như sau
./clipscreen 800x600+100+100
- Lệnh này tạo một cửa sổ overlay 800x600 bắt đầu tại vị trí
(100, 100) trên màn hình
Chọn vùng tương tác và thoát
- Để chọn vùng theo cách tương tác, có thể chạy cùng
hacksaw hoặc slop
./clipscreen $(hacksaw)
./clipscreen $(slop)
- Công cụ liên quan
- Để thoát, nhấn Ctrl+C trong terminal đang chạy ứng dụng
1 bình luận
Các ý kiến trên Hacker News
Vì vậy, tôi đã dùng phần mở rộng xrandr để mirror một vùng cụ thể thành màn hình ảo, rồi tạo một công cụ nhỏ cho phép chia sẻ màn hình ảo đó
Chi tiết có trong bài blog: https://www.splitbrain.org/blog/2024-10/11-introducing_clips...
Tôi dùng như vậy cho môi trường demo: https://gist.github.com/radupotop/d77a47767e2e65a7e7d40d1ea8...
sleep(100)trong vòng lặp cho đến khi nhận SIGINTVì thế CPU usage có thể tăng cao mà chẳng có lý do gì đặc biệt
Nếu thoát theo cách không phải SIGINT, chỉ output ảo có thể còn lại còn cửa sổ overlay biến mất, nên hơi gượng một chút, nhưng không phải vấn đề lớn. Tuy nhiên, tốt nhất đừng xem số dòng code là thước đo quá quan trọng cho chất lượng hay sự thanh lịch
Cách này không thể áp dụng y nguyên trên Wayland. Thay vào đó, trên Wayland có thể ngay từ đầu đã không cần công cụ này. Cách chuẩn để một tiến trình không có quyền capture màn hình là desktop portal, và ít nhất KDE hỗ trợ nhiều tùy chọn capture, bao gồm capture một hình chữ nhật trên màn hình. Ngay cả khi đang chạy ứng dụng X.org thì có vẻ vẫn làm được nhờ XWaylandVideoBridge
Việc D-Bus được dùng khắp nơi thì không đáng mừng lắm, nhưng điểm hay là nếu thay đổi implementation của
org.freedesktop.impl.portal.ScreenCast, ta gần như có thể thay thế hành vi capture màn hình theo ý muốn. Tôi cho rằng đó là hướng tốt hơn so với việc mỗi ứng dụng tự triển khai chức năng chọn đối tượng capture theo cách riêngĐiều đó không có nghĩa X11 không hay và không phù hợp để hack, nhưng nếu không chỉ giả định trường hợp sử dụng hoàn hảo, code sẽ phình to và phức tạp hơn, đổi lại cũng vững chắc hơn
Ví dụ, cứ thử chạy
./clipscreen 1 2 3 4là biếtMuốn nghịch gì đó thì có thể làm ngay. ICCCM từng bị chửi rất nhiều vào đầu thập niên 90, nhưng phía khác lại không có thứ tương đương, và đến giờ trong mảng window manager vẫn liên tục có các thử nghiệm mới
xrandr --setmonitor screenshare 2560/1x1440/1+0+0 nonegeo=$(slop -f '%w/1x%h/1+%x+%y') && xrandr --setmonitor screenshare "$geo" noneDù vậy vẫn là một câu lệnh một dòng rất hay
Như vậy có thể biết cửa sổ có kích thước phù hợp để người khác xem trên laptop hay không, và phần preview đi theo chuột, cho phép chỉnh mức zoom và ranh giới chuột ngay tại chỗ
Cửa sổ preview của OBS mở khi chạy mà không có cửa sổ OBS chính, nên sau đó không cần nhìn hay thao tác với cửa sổ OBS chính hoặc ứng dụng nữa, cảm giác như một công cụ chạy độc lập, điểm này rất hay
https://github.com/BlankSourceCode/obs-zoom-to-mouse
Rectangular Region cho phép chia sẻ một phần màn hình đã chọn, còn New Virtual Output lập tức tạo một màn hình ảo hiển thị trong KDE Display Configuration. Màn hình ảo này có thể được đặt chồng lên màn hình vật lý hiện có hoặc không