1 poin oleh GN⁺ 2024-10-15 | 1 komentar | Bagikan ke WhatsApp
  • clipscreen adalah aplikasi X11 sederhana yang membuat monitor virtual yang mencerminkan area tertentu di layar, dan menandai area tersebut dengan persegi panjang hijau
  • Di alat berbagi layar seperti Google Meet, Microsoft Teams, dan Jitsi Meet, pengguna dapat membagikan monitor virtual alih-alih seluruh layar atau jendela individual
  • Cukup pindahkan jendela yang ingin dibagikan ke dalam bingkai hijau, sehingga kebutuhan untuk membagikan banyak jendela secara terpisah atau terus mengganti target berbagi berkurang
  • Menjalankannya menggunakan format ./clipscreen <width>x<height>+<x>+<y>, dan pemilihan area interaktif juga dimungkinkan jika digunakan bersama hacksaw atau slop
  • Baru diuji di Linux dan xorg, dan tidak ada jaminan akan berfungsi di sistem lain

Apa yang dilakukan clipscreen

  • clipscreen adalah aplikasi yang membuat monitor virtual yang menduplikasi sebagian layar
  • Area layar yang ditentukan disorot dengan persegi panjang hijau
  • Pengguna dapat membagikan monitor virtual ini di alat berbagi layar rapat video biasa
    • Contoh: Google Meet
    • Microsoft Teams
    • Jitsi Meet

Cara berbagi layar

  • Alih-alih membagikan seluruh layar atau membagikan tiap jendela secara terpisah, pengguna membagikan monitor virtual yang dibuat oleh clipscreen
  • Jendela yang ingin dibagikan cukup dipindahkan ke dalam bingkai hijau
  • Ini adalah cara yang mengurangi kebutuhan untuk terus mengganti jendela yang dibagikan saat menangani banyak jendela

Persyaratan build

  • Sistem memerlukan komponen berikut
    • Library pengembangan X11

      • Library grafis Cairo
      • Kompiler C, misalnya gcc
      • Di Ubuntu 24.04, library yang diperlukan dapat dipasang dengan perintah berikut
apt-get install libx11-dev xserver-xorg-dev xorg-dev libcairo2-dev gcc
- Build dijalankan dengan perintah berikut
make
- Aplikasi ini baru diuji di **Linux dan xorg**, dan belum pasti apakah akan berfungsi di sistem lain

Cara penggunaan

  • File biner yang sudah dikompilasi dijalankan dengan format berikut
./clipscreen <width>x<height>+<x>+<y>
  • Argumen menentukan posisi dan ukuran overlay serta monitor virtual
    • <width>: lebar overlay dan monitor virtual
    • <height>: tinggi overlay dan monitor virtual
    • <x>: koordinat x kiri atas overlay dan monitor virtual
    • <y>: koordinat y kiri atas overlay dan monitor virtual
  • Contohnya seperti berikut
./clipscreen 800x600+100+100
  • Perintah ini membuat jendela overlay 800x600 yang dimulai dari posisi (100, 100) pada layar

Pemilihan area interaktif dan keluar

  • Untuk memilih area secara interaktif, dapat dijalankan bersama hacksaw atau slop
./clipscreen $(hacksaw)
./clipscreen $(slop)
  • Alat terkait
  • Untuk keluar, tekan Ctrl+C di terminal tempat aplikasi berjalan

1 komentar

 
GN⁺ 2024-10-15
Opini Hacker News
  • Berbagi layar Google Meet terasa merepotkan di monitor ultrawide 49 inci. Sebab yang bisa dibagikan hanya satu jendela atau seluruh layar, tidak bisa sebagian area layar
    Jadi saya membuat alat kecil yang memakai ekstensi xrandr untuk me-mirror area tertentu sebagai monitor virtual, lalu monitor virtual itu bisa dibagikan
    Detailnya ada di tulisan blog: https://www.splitbrain.org/blog/2024-10/11-introducing_clips...
    • Ini tampak sangat berguna saat memakai layar besar. Layar 27 inci tidak seluas 49 inci untuk ruang kerja, jadi saya memakai skrip yang membuka jendela Xephyr terpisah pada DISPLAY 9 dan menaruh beberapa jendela di layar itu
      Saya menggunakannya seperti ini untuk lingkungan demo: https://gist.github.com/radupotop/d77a47767e2e65a7e7d40d1ea8...
  • Saya suka betapa sederhananya ini. Kalau komentar dihapus, hanya sekitar 100 baris C++, dan hal seperti ini membuat saya lebih menyukai X11 daripada Wayland
    • Kodenya agak aneh. Tidak ada event loop XLib, dan di dalam loop ia memanggil sleep(100) sampai menerima SIGINT
      Karena itu penggunaan CPU bisa tinggi tanpa alasan khusus
    • Di Wayland, kalau memulai capture lewat API xdg-desktop-portal, pengguna akan diberi notifikasi dan diminta memilih area yang akan di-capture
    • Membuat display Xrandr virtual yang bertumpang tindih dengan display fisik yang sudah ada adalah semacam trik elegan khas X.org yang hampir tidak bisa dilakukan dengan mudah di sistem window lain
      Jika dihentikan dengan cara selain SIGINT, output virtual bisa tertinggal sementara jendela overlay menghilang, jadi agak canggung, tetapi bukan masalah besar. Namun sebaiknya jangan terlalu menjadikan jumlah baris kode sebagai ukuran kualitas atau keanggunan
      Pendekatan ini tidak bisa dilakukan begitu saja di Wayland. Sebagai gantinya, di Wayland mungkin alat ini tidak diperlukan sejak awal. Cara standar bagi proses tanpa izin untuk meng-capture layar adalah desktop portal, dan setidaknya KDE mendukung berbagai opsi capture termasuk capture persegi panjang layar. Tampaknya ini tetap mungkin meski menjalankan aplikasi X.org berkat XWaylandVideoBridge
      Saya kurang senang D-Bus dipakai di mana-mana, tetapi bagus bahwa dengan mengganti implementasi org.freedesktop.impl.portal.ScreenCast, hampir semua perilaku capture layar yang diinginkan bisa diganti. Menurut saya ini arah yang lebih baik daripada setiap aplikasi mengimplementasikan sendiri-sendiri fitur pemilihan target capture
    • Jumlah kode yang sangat sedikit itu karena hampir tidak ada penanganan error dan pemeriksaan kewarasan
      Itu bukan berarti X11 tidak bagus dan menyenangkan untuk di-hack, tetapi kalau tidak mau berasumsi hanya pemakaian sempurna, kodenya akan membengkak dan menjadi rumit, dan sebagai gantinya lebih tangguh
      Misalnya coba jalankan ./clipscreen 1 2 3 4
    • Saya tidak bermaksud menyangkal perdebatan selama puluhan tahun bahwa X11 punya banyak kekurangan, tetapi mengejutkan bahwa sekarang X11 justru tampak seperti lingkungan grafis desktop yang paling sederhana dan paling mudah di-hack di antara yang bisa dipakai
      Kalau ingin mengutak-atik sesuatu, bisa langsung dilakukan. ICCCM dulu banyak dihujat pada awal 90-an, tetapi di sisi lain tidak ada padanannya, dan sampai sekarang masih terus muncul eksperimen baru di ranah window manager
  • Seingat saya, di Zoom kita bisa berbagi beberapa layar atau jendela, bukan hanya satu. Saat mengklik jendela yang ingin dibagikan, tekan tombol SHFT
    • Bagaimana orang bisa menemukan fitur seperti ini?
  • Ini secara harfiah bisa dilakukan hanya dengan xrandr
    xrandr --setmonitor screenshare 2560/1x1440/1+0+0 none
    • Kalau ingin pemilihannya interaktif, bisa begini
      geo=$(slop -f '%w/1x%h/1+%x+%y') && xrandr --setmonitor screenshare "$geo" none
    • Agar adil, alat ini pada akhirnya memang melakukan hal itu dan overlay-nya dengan C++
      Meski begitu, itu perintah satu baris yang keren
  • Bukankah ini juga bisa dilakukan dengan OBS di platform apa pun, termasuk Wayland? Setelah membaca beberapa komentar, sepertinya banyak orang tidak tahu OBS, atau mungkin saya yang melebih-lebihkan fitur OBS
    • Mungkin bisa. Saya belum pernah memakai OBS, tetapi mungkin ukurannya sedikit lebih besar daripada binary 20KB
    • Bisa, tetapi butuh sedikit lebih banyak usaha. Harus melewati beberapa langkah di GUI, dan kalau harus disetel ulang setiap sebelum rapat, jadinya cukup merepotkan
    • OBS hanya memungkinkan berbagi satu jendela atau area klien aplikasi
  • Di monitor 49 inci, saya menggabungkan OBS, skrip follow-mouse, dan jendela preview OBS di layar laptop, lalu membagikan seluruh layar laptop
    Dengan begitu saya bisa tahu apakah ukuran jendelanya nyaman dilihat orang lain di laptop, dan preview-nya mengikuti mouse sehingga tingkat zoom dan batas mouse bisa disesuaikan saat itu juga
    Jendela preview OBS terbuka saat dijalankan tanpa jendela utama OBS, jadi setelah itu saya tidak perlu melihat atau mengoperasikan jendela utama OBS maupun aplikasinya, dan rasanya seperti aplikasi standalone
    https://github.com/BlankSourceCode/obs-zoom-to-mouse
  • Di KDE 6.1, Wayland, dan Chromium, saat menekan tombol berbagi pada layanan seperti Jitsi, pertama muncul opsi berbagi Entire Screen, lalu dialog berisi Full Workspace, New Virtual Output, Rectangular Region, serta daftar display
    Rectangular Region bisa membagikan sebagian layar yang dipilih, dan New Virtual Output langsung membuat layar virtual yang terlihat di KDE Display Configuration. Layar virtual ini bisa ditempatkan bertumpang tindih di atas display fisik yang ada, atau tidak
  • Benar-benar luar biasa. Karena use case persis ini di Linux, perusahaan kami memilih Zoom alih-alih Meet
    • Setelah membangun sendiri, saya mengambil screenshot layar penuh dengan GIMP untuk mengetahui lebar, tinggi, dan koordinat x/y yang diinginkan, lalu mengujinya di Google Meet. Berfungsi sempurna
  • Ini juga bisa dilakukan dengan xzoom, bahkan bisa memperbesar lebih dari 1x. Apakah ada keunggulan yang saya lewatkan?
  • Saya penasaran mengapa platform konferensi video saat ini masih belum memenuhi kebutuhan ini. Monitor raksasa makin umum, terutama bagi para developer yang membuat alat seperti ini
    • Mungkin karena workaround dengan OBS tidak terlalu sulit