1 puan yazan GN⁺ 2024-10-15 | 1 yorum | WhatsApp'ta paylaş
  • clipscreen, ekranın belirli bir bölgesini yansıtan sanal monitör oluşturan ve bu bölgeyi yeşil bir dikdörtgenle gösteren basit bir X11 uygulamasıdır
  • Google Meet, Microsoft Teams, Jitsi Meet gibi ekran paylaşım araçlarında tüm ekran veya tek tek pencereler yerine sanal monitör paylaşılabilir
  • Paylaşmak istediğiniz pencereyi yeşil çerçevenin içine taşımanız yeterli olduğundan, birden fazla pencereyi ayrı ayrı paylaşma veya paylaşım hedefini değiştirme ihtiyacı azalır
  • Çalıştırma biçimi ./clipscreen <width>x<height>+<x>+<y> şeklindedir; hacksaw veya slop ile birlikte kullanıldığında etkileşimli bölge seçimi de yapılabilir
  • Yalnızca Linux ve xorg üzerinde test edilmiştir; diğer sistemlerde çalışacağı garanti edilmez

clipscreen ne yapar

  • clipscreen, ekranın bir kısmını kopyalayan sanal monitör oluşturan bir uygulamadır
  • Belirlenen ekran bölgesi yeşil bir dikdörtgen ile vurgulanır
  • Kullanıcı, standart görüntülü toplantı ekran paylaşım araçlarında bu sanal monitörü paylaşabilir
    • Örnek: Google Meet
    • Microsoft Teams
    • Jitsi Meet

Ekran paylaşım yöntemi

  • Tüm ekranı paylaşmak veya tek tek pencereleri ayrı paylaşmak yerine, clipscreen’in oluşturduğu sanal monitör paylaşılır
  • Paylaşılacak pencere yeşil çerçevenin içine taşınır
  • Birden fazla pencereyle çalışırken paylaşılan pencereyi sürekli değiştirmeyi gerektirmeyen bir yöntemdir

Derleme gereksinimleri

  • Sistemde aşağıdakiler gerekir
    • X11 geliştirme kütüphaneleri

      • Cairo grafik kütüphanesi
      • C derleyicisi, örn. gcc
      • Ubuntu 24.04’te gerekli kütüphaneler aşağıdaki komutla kurulabilir
apt-get install libx11-dev xserver-xorg-dev xorg-dev libcairo2-dev gcc
- Derleme aşağıdaki komutla çalıştırılır
make
- Uygulama yalnızca **Linux ve xorg** üzerinde test edilmiştir; diğer sistemlerde çalışıp çalışmayacağı kesin değildir

Kullanım

  • Derlenmiş çalıştırılabilir dosya aşağıdaki biçimde çalıştırılır
./clipscreen <width>x<height>+<x>+<y>
  • Argümanlar, overlay ve sanal monitörün konumunu ve boyutunu belirtir
    • <width>: overlay ve sanal monitörün genişliği
    • <height>: overlay ve sanal monitörün yüksekliği
    • <x>: overlay ve sanal monitörün sol üst x koordinatı
    • <y>: overlay ve sanal monitörün sol üst y koordinatı
  • Örnek şöyledir
./clipscreen 800x600+100+100
  • Bu komut, ekranda (100, 100) konumundan başlayan 800x600 boyutunda bir overlay penceresi oluşturur

Etkileşimli bölge seçimi ve çıkış

  • Bir bölgeyi etkileşimli olarak seçmek için hacksaw veya slop ile birlikte çalıştırılabilir
./clipscreen $(hacksaw)
./clipscreen $(slop)
  • İlgili araçlar
  • Çıkmak için uygulamanın çalıştığı terminalde Ctrl+C tuşlarına basmak yeterlidir

1 yorum

 
GN⁺ 2024-10-15
Hacker News yorumları
  • 49 inç ultrawide monitörde Google Meet ekran paylaşımı kullanmak zahmetliydi. Çünkü yalnızca tek bir pencereyi ya da tüm ekranı paylaşabiliyordunuz; ekranın belirli bir bölgesi paylaşılamıyordu.
    Bu yüzden xrandr uzantısını kullanarak belirli bir bölgeyi sanal monitör olarak yansıtan ve bu sanal monitörü paylaşmayı sağlayan küçük bir araç yaptım.
    Ayrıntılar blog yazısında: https://www.splitbrain.org/blog/2024-10/11-introducing_clips...
    • Büyük bir ekran kullanabildiğinizde gerçekten işe yarar görünüyor. 27 inç ekran, 49 inç kadar geniş bir çalışma alanı sunmadığı için, DISPLAY 9 üzerinde ayrı bir Xephyr penceresi açıp o ekrana birden fazla pencere koyan bir betik kullanıyorum.
      Demo ortamı olarak böyle kullanıyorum: https://gist.github.com/radupotop/d77a47767e2e65a7e7d40d1ea8...
  • Bunun ne kadar basit olması hoşuma gitti. Yorumları çıkarınca 100 satır civarı C++; bu tür şeyler yüzünden Wayland yerine X11’i daha çok tercih ediyorum.
    • Kod biraz tuhaf. XLib event loop yok; SIGINT alana kadar döngü içinde sleep(100) çağırıyor.
      Bu yüzden belirgin bir neden olmadan CPU kullanımı artabilir.
    • Wayland’de xdg-desktop-portal API ile yakalamayı başlattığınızda kullanıcıya bildirim gösterilir ve yakalanacak bölgeyi seçmesi sağlanır.
    • Mevcut fiziksel ekranlarla çakışan bir sanal Xrandr ekranı oluşturmak, başka pencere sistemlerinde kolay kolay yapılamayan zarif bir X.org hüneri gibi.
      SIGINT dışında bir yöntemle kapanırsa sanal çıktı kalıp overlay penceresi kaybolabilir; bu biraz tuhaf ama büyük sorun değil. Yine de kod satırı sayısını kalite ya da zarafetin ölçüsü olarak fazla abartmamak iyi olur.
      Bu yöntem Wayland’de aynı haliyle mümkün değil. Buna karşılık Wayland’de bu araca en başta ihtiyaç olmayabilir. Yetkisiz bir sürecin ekranı yakalaması için standart yol desktop portal; en azından KDE, ekranın dikdörtgen bir bölgesini yakalama dahil çeşitli yakalama seçeneklerini destekliyor. X.org uygulaması çalıştırıyor olsanız bile XWaylandVideoBridge sayesinde mümkün olmalı.
      D-Bus’ın her yerde kullanılması pek hoşuma gitmiyor ama org.freedesktop.impl.portal.ScreenCast uygulamasını değiştirerek istediğiniz ekran yakalama davranışını büyük ölçüde ikame edebilmeniz güzel. Bence her uygulamanın yakalanacak hedefi seçme işlevini ayrı ayrı uygulamasından daha iyi bir yön.
    • Kodun çok az olmasının nedeni hata işleme ve doğruluk kontrollerinin neredeyse hiç olmaması.
      Bu, X11’in hack’lemeye uygun ve havalı olmadığı anlamına gelmiyor; ama yalnızca kusursuz kullanımı varsaymak istemezseniz kod şişer, karmaşıklaşır ve o ölçüde sağlamlaşır.
      Örneğin ./clipscreen 1 2 3 4 çalıştırmayı deneyin.
    • On yıllardır süren, kusurları olduğu yönündeki tartışmayı inkâr etmeye çalışmıyorum; ama X11’in bugün kullanılabilir masaüstü grafik ortamları arasında en basit ve hack’lemeye en açık ortam gibi görünür hale gelmesi şaşırtıcı.
      Bir şeylerle oynamak istiyorsanız hemen yapabiliyorsunuz. ICCCM 90’ların başında çok eleştirilmişti, ama diğer tarafta buna karşılık gelen bir şey yok ve pencere yöneticisi alanında hâlâ yeni denemeler çıkıyor.
  • Zoom’da ekran ya da pencereyi yalnızca bir tane değil, birden fazla paylaşabildiğinizi hatırlıyorum. Paylaşmak istediğiniz pencereye tıklarken SHFT tuşuna basıyorsunuz.
    • İnsan böyle bir özelliği nasıl keşfediyor ki?
  • Bu, kelimenin tam anlamıyla yalnızca xrandr ile de yapılabilir.
    xrandr --setmonitor screenshare 2560/1x1440/1+0+0 none
    • Seçimi etkileşimli yapmak için şöyle yapılabilir:
      geo=$(slop -f '%w/1x%h/1+%x+%y') && xrandr --setmonitor screenshare "$geo" none
    • Hakkını vermek gerekirse bu araç da sonuçta o işi ve overlay’i C++ ile yapıyor.
      Yine de harika bir tek satırlık komut.
  • OBS ile de Wayland dahil herhangi bir platformda bunu yapabiliyor olmak gerekmez mi? Birçok yorumu okudukça, ya pek çok kişinin OBS’yi bilmediğini ya da benim OBS’nin yeteneklerini abarttığımı düşünüyorum.
    • Muhtemelen mümkündür. OBS’yi hiç kullanmadım ama herhalde 20KB’lık bir ikili dosyadan biraz daha büyüktür.
    • Mümkün, ama biraz daha uğraştırıyor. GUI’de birkaç adımdan geçmeniz gerekiyor; her toplantıdan önce tekrar ayarlamak gerekiyorsa epey zahmetli oluyor.
    • OBS yalnızca tek bir pencereyi ya da bir uygulamanın client area’sını paylaşmanıza izin veriyor.
  • 49 inç monitörde OBS, fareyi takip eden bir betik ve dizüstü ekranındaki OBS önizleme penceresini birleştirip dizüstü ekranının tamamını paylaşıyorum.
    Böylece başkaları için dizüstü bilgisayarda izlemeye uygun pencere boyutunda olup olmadığını anlayabiliyorum; önizleme fareyi takip ediyor ve yakınlaştırma seviyesi ile fare sınırlarını anında ayarlayabiliyorum.
    OBS önizleme penceresi çalıştırıldığında ana OBS penceresi olmadan açılıyor; bu yüzden sonrasında ana OBS penceresini ya da uygulamayı görmeye veya kullanmaya gerek kalmıyor, bağımsız bir uygulama gibi hissettirmesi hoşuma gidiyor.
    https://github.com/BlankSourceCode/obs-zoom-to-mouse
  • KDE 6.1, Wayland ve Chromium’da Jitsi gibi servislerde paylaş düğmesine bastığınızda önce Entire Screen paylaşım seçeneği çıkıyor; ardından Full Workspace, New Virtual Output, Rectangular Region ve ekran listesini içeren bir iletişim kutusu açılıyor.
    Rectangular Region, seçtiğiniz ekran bölümünü paylaşmanızı sağlıyor; New Virtual Output ise KDE Display Configuration’da görünen sanal ekranı anında oluşturuyor. Bu sanal ekran mevcut fiziksel ekranın üzerine bindirilerek yerleştirilebilir ya da yerleştirilmeyebilir.
  • Gerçekten harika. Linux’ta tam olarak bu kullanım senaryosu yüzünden şirketimiz Meet yerine Zoom’u seçti.
    • Kendim derledikten sonra GIMP ile tam ekran ekran görüntüsü alıp istediğim genişlik, yükseklik ve x/y koordinatlarını buldum, sonra Google Meet’te test ettim. Kusursuz çalışıyor.
  • xzoom ile de bunu yapabiliyorsunuz ve 1x’ten fazla büyütme de mümkün; acaba kaçırdığım bir avantaj mı var?
  • Mevcut video konferans platformlarında bu ihtiyacın neden hâlâ karşılanmadığını merak ediyorum. Dev monitörler giderek yaygınlaştı; özellikle de böyle araçlar geliştirecek geliştiriciler arasında.
    • OBS ile etrafından dolaşmak çok zor olmadığı için olabilir.