1 पॉइंट द्वारा GN⁺ 2024-10-15 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • clipscreen एक सरल X11 एप्लिकेशन है, जो स्क्रीन के किसी खास क्षेत्र को मिरर करने वाला virtual monitor बनाता है और उस क्षेत्र को हरे रंग के आयत से दिखाता है
  • Google Meet, Microsoft Teams, Jitsi Meet जैसे screen sharing tools में पूरी स्क्रीन या अलग-अलग windows की जगह virtual monitor शेयर किया जा सकता है
  • जिस window को शेयर करना है उसे हरी बॉर्डर के अंदर ले जाना होता है, इसलिए कई windows को अलग-अलग शेयर करने या शेयर target बदलने की जरूरत कम हो जाती है
  • इसे ./clipscreen <width>x<height>+<x>+<y> फॉर्मेट में चलाया जाता है, और hacksaw या slop के साथ इस्तेमाल करने पर interactive area selection भी संभव है
  • इसे केवल Linux और xorg पर टेस्ट किया गया है, और अन्य systems पर इसके काम करने की गारंटी नहीं है

clipscreen क्या करता है

  • clipscreen एक ऐसा एप्लिकेशन है जो स्क्रीन के एक हिस्से को कॉपी करने वाला virtual monitor बनाता है
  • चुने गए स्क्रीन क्षेत्र को हरे रंग के आयत से highlight किया जाता है
  • यूजर सामान्य video conferencing screen sharing tools में इस virtual monitor को शेयर कर सकता है
    • उदाहरण: Google Meet
    • Microsoft Teams
    • Jitsi Meet

स्क्रीन शेयर करने का तरीका

  • पूरी स्क्रीन शेयर करने या अलग-अलग windows को अलग से शेयर करने के बजाय, clipscreen द्वारा बनाए गए virtual monitor को शेयर किया जाता है
  • शेयर की जाने वाली window को हरी बॉर्डर के अंदर ले जाना होता है
  • कई windows के साथ काम करते समय शेयर की जा रही window को बार-बार बदलने की जरूरत नहीं पड़ती

Build requirements

  • सिस्टम में नीचे दी गई चीजें चाहिए
    • X11 development libraries

      • Cairo graphics library
      • C compiler, जैसे gcc
      • Ubuntu 24.04 में जरूरी libraries नीचे दिए गए command से install की जा सकती हैं
apt-get install libx11-dev xserver-xorg-dev xorg-dev libcairo2-dev gcc
- Build नीचे दिए गए command से चलाया जाता है
make
- एप्लिकेशन को केवल **Linux और xorg** पर टेस्ट किया गया है, और अन्य systems पर इसके काम करने को लेकर निश्चितता नहीं है

इस्तेमाल का तरीका

  • compiled executable file को नीचे दिए गए फॉर्मेट में चलाया जाता है
./clipscreen <width>x<height>+<x>+<y>
  • arguments overlay और virtual monitor की position और size तय करते हैं
    • <width>: overlay और virtual monitor की चौड़ाई
    • <height>: overlay और virtual monitor की ऊंचाई
    • <x>: overlay और virtual monitor के top-left का x coordinate
    • <y>: overlay और virtual monitor के top-left का y coordinate
  • उदाहरण नीचे है
./clipscreen 800x600+100+100
  • यह command स्क्रीन पर (100, 100) position से शुरू होने वाली 800x600 overlay window बनाता है

Interactive area selection और बंद करना

  • area को interactively चुनने के लिए इसे hacksaw या slop के साथ चलाया जा सकता है
./clipscreen $(hacksaw)
./clipscreen $(slop)
  • संबंधित tools
  • बंद करने के लिए उस terminal में Ctrl+C दबाएं जिसमें एप्लिकेशन चल रहा है

1 टिप्पणियां

 
GN⁺ 2024-10-15
Hacker News की टिप्पणियाँ
  • 49-इंच ultrawide monitor पर Google Meet में screen share करना असुविधाजनक था। क्योंकि सिर्फ एक window या पूरी screen ही share कर सकते थे, screen का कोई हिस्सा नहीं।
    इसलिए xrandr extension का इस्तेमाल करके एक खास area को virtual monitor में mirror करने और फिर उस virtual monitor को share करने वाला एक छोटा tool बनाया।
    ज़्यादा जानकारी blog post में है: https://www.splitbrain.org/blog/2024-10/11-introducing_clips...
    • बड़ी screen इस्तेमाल कर पाने पर यह सच में उपयोगी लगता है। 27-इंच screen में 49-इंच जितना workspace नहीं होता, इसलिए मैं DISPLAY 9 पर एक अलग Xephyr window खोलकर उसमें कई windows रखने वाली script इस्तेमाल कर रहा हूँ।
      demo environment के तौर पर इसे ऐसे इस्तेमाल करता हूँ: https://gist.github.com/radupotop/d77a47767e2e65a7e7d40d1ea8...
  • यह कितना simple है, यह बात पसंद आई। comments हटाने पर यह C++ की करीब 100 lines ही है, और ऐसी ही चीज़ों की वजह से मैं Wayland की तुलना में X11 को ज़्यादा पसंद करता हूँ।
    • code थोड़ा अजीब है। XLib event loop नहीं है, और SIGINT मिलने तक loop में sleep(100) call करता है।
      इस वजह से बिना खास कारण CPU usage बढ़ सकता है।
    • Wayland में xdg-desktop-portal API से capture शुरू करने पर user को notification दिखता है और capture करने वाला region चुनने दिया जाता है।
    • मौजूदा physical display से overlap करता हुआ virtual Xrandr display बनाना, ऐसा elegant X.org का करतब है जो शायद दूसरे window systems में आसानी से नहीं किया जा सकता।
      अगर SIGINT के अलावा किसी और तरीके से बंद किया जाए, तो virtual output बचा रह सकता है और overlay window गायब हो सकती है, इसलिए थोड़ा awkward है, लेकिन बड़ी समस्या नहीं। हालांकि code की line count को quality या elegance का पैमाना मानने में ज़रूरत से ज़्यादा नहीं जाना चाहिए।
      यह तरीका Wayland में ज्यों-का-त्यों संभव नहीं है। इसके बजाय Wayland में शायद शुरुआत से ही इस tool की ज़रूरत न पड़े। बिना permission वाले process द्वारा screen capture करने का standard तरीका desktop portal है, और कम-से-कम KDE screen rectangle capture सहित कई capture options support करता है। X.org app चल रही हो तब भी XWaylandVideoBridge की वजह से यह संभव लगता है।
      D-Bus का जगह-जगह इस्तेमाल बहुत अच्छा नहीं लगता, लेकिन org.freedesktop.impl.portal.ScreenCast implementation बदलकर मनचाहा screen capture behavior लगभग replace किया जा सकता है, यह अच्छी बात है। हर app अपने-अपने तरीके से capture target selection लागू करे, उससे यह बेहतर दिशा लगती है।
    • code बहुत कम इसलिए है क्योंकि error handling और sanity checks लगभग नहीं हैं।
      इसका मतलब यह नहीं कि X11 hacking के लिए अच्छा और cool नहीं है, लेकिन perfect usage से अलग स्थितियाँ भी संभालनी हों तो code बड़ा और complex हो जाता है, और उतना ही robust भी।
      उदाहरण के लिए ./clipscreen 1 2 3 4 चलाकर देखिए।
    • मैं यह नकारना नहीं चाहता कि दशकों से इसकी कमियों पर बहस होती रही है, लेकिन यह चौंकाने वाला है कि आज X11 usable desktop graphics environments में सबसे simple और hackable environment जैसा दिखने लगा है।
      कुछ शरारती/experiment करना हो तो तुरंत कर सकते हैं। ICCCM को 90 के शुरुआती दशक में बहुत गालियाँ पड़ी थीं, लेकिन दूसरी तरफ उसका कोई equivalent नहीं है, और आज भी window manager क्षेत्र में लगातार नए प्रयोग होते रहते हैं।
  • मुझे याद है Zoom में सिर्फ एक screen या window नहीं, बल्कि कई चीज़ें share कर सकते थे। जिस window को share करना हो उस पर click करते समय SHFT key दबाएँ।
    • लोग ऐसी feature आखिर discover कैसे करते हैं?
  • यह तो सचमुच सिर्फ xrandr से भी किया जा सकता है।
    xrandr --setmonitor screenshare 2560/1x1440/1+0+0 none
    • selection को interactive बनाना हो तो ऐसे कर सकते हैं।
      geo=$(slop -f '%w/1x%h/1+%x+%y') && xrandr --setmonitor screenshare "$geo" none
    • न्याय की बात करें तो यह tool भी आखिर वही काम और overlay C++ में करता है।
      फिर भी यह शानदार one-line command है।
  • क्या OBS से भी Wayland समेत किसी भी platform पर यह नहीं किया जा सकता? कई comments पढ़कर लग रहा है कि बहुत लोग OBS को नहीं जानते, या फिर शायद मैं OBS की capabilities को ज़्यादा आँक रहा हूँ।
    • शायद संभव होगा। मैंने OBS कभी इस्तेमाल नहीं किया, लेकिन यह शायद 20KB binary से कुछ बड़ा होगा।
    • संभव तो है, लेकिन थोड़ा ज़्यादा मेहनत वाला है। GUI में कई steps करने पड़ते हैं, और हर meeting से पहले हर बार adjust करना पड़े तो काफी झंझट हो जाता है।
    • OBS सिर्फ एक window या app का client area share करने देता है।
  • 49-इंच monitor पर मैं OBS, mouse-follow script, और laptop screen पर OBS preview window को मिलाकर इस्तेमाल करता हूँ, और laptop की पूरी screen share करता हूँ।
    इससे पता चल जाता है कि दूसरे लोगों के laptop पर window size देखने लायक है या नहीं, और preview mouse को follow करता है, जिससे zoom level और mouse boundary को तुरंत adjust कर सकते हैं।
    अच्छी बात यह है कि OBS preview window launch के समय main OBS window के बिना खुलती है, इसलिए बाद में main OBS window या app को देखने या control करने की ज़रूरत नहीं रहती और यह standalone जैसा महसूस होता है।
    https://github.com/BlankSourceCode/obs-zoom-to-mouse
  • KDE 6.1, Wayland, Chromium में Jitsi जैसी service का share button दबाने पर पहले Entire Screen share option आता है, फिर Full Workspace, New Virtual Output, Rectangular Region, और displays की list वाला dialog दिखता है।
    Rectangular Region selected screen का हिस्सा share कर सकता है, और New Virtual Output तुरंत एक virtual screen बनाता है जो KDE Display Configuration में दिखती है। यह virtual screen मौजूदा physical display के ऊपर overlap करके रखी जा सकती है या नहीं भी।
  • सच में बेहतरीन। Linux पर इसी use case की वजह से हमारी company ने Meet के बजाय Zoom चुना।
    • खुद build करने के बाद GIMP से full-screen screenshot लिया, desired width, height, x/y coordinates निकाले और Google Meet में test किया। बिल्कुल perfect काम करता है।
  • xzoom से भी यह किया जा सकता है, और 1x से ज़्यादा zoom भी संभव है। क्या कोई ऐसा फायदा है जो मैं miss कर रहा हूँ?
  • समझ नहीं आता कि मौजूदा video-conferencing platforms में यह जरूरत अब तक पूरी क्यों नहीं हुई। बड़े monitors अब और common होते जा रहे हैं, खासकर ऐसे tools बनाने वाले developers के लिए तो और भी।
    • शायद इसलिए कि OBS के जरिए workaround करना बहुत मुश्किल नहीं है।