[HN Gopher] DeskPad - A virtual monitor for screen sharing
       ___________________________________________________________________
        
       DeskPad - A virtual monitor for screen sharing
        
       Author : geerlingguy
       Score  : 473 points
       Date   : 2024-10-10 16:36 UTC (6 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | mcphage wrote:
       | As someone with an ultrawide monitor, this seems like a really
       | neat solution. Thanks for sharing it!
        
       | rcarmo wrote:
       | This is _genius_. I have been using RegionToShare in Windows to
       | share only a section of a widescreen monitor, but didn't have a
       | good Mac equivalent. Now I have something that may well work
       | _just as well_ with Windows inside Parallels (need to try that
       | ASAP, am on the "wrong" Mac now).
       | 
       | Edit: A quick test shows that yes, the Windows VM sees the
       | additional display just fine--but, alas, Parallels doesn't let me
       | pass _just_ one physical and that virtual display to the VM, so I
       | can't have my "personal" portrait monitor unoccupied by
       | Windows...
        
         | rr60 wrote:
         | +1 for RegionToShare on windows. It's not perfect but it has
         | made sharing on a 49" monitor much much easier.
        
       | delusional wrote:
       | What an intriguing idea. I wonder if I could do something similar
       | on linux by placing a second monitor on top of my current one
       | with xrandr.
        
         | sadjad wrote:
         | On Linux, you can try Xephyr
         | (https://www.freedesktop.org/wiki/Software/Xephyr/,
         | https://wiki.archlinux.org/title/Xephyr). It's not as nice as
         | DeskPad, but you can basically achieve the same thing.
        
           | arjvik wrote:
           | Xephyr runs a whole new X server - it's not as easy to drag
           | and drop an application into the nested server, it has to be
           | launched with DISPLAY=:1.
        
         | nixosbestos wrote:
         | It's too easy to just use OBS for this, in my opinion. Add the
         | pipewire display capture, add a filter to crop it to a corner,
         | stretch that container to fit the stage, open the window in the
         | corner. Fairly simple.
        
       | _6GoofyWizard9_ wrote:
       | Very nice idea! It would be nice to be able to do the same on
       | Linux and/or Windows, too!
        
         | bitbang wrote:
         | This has been possible on Linux (Wayland + pipewire) for a
         | couple years now.
        
       | neilv wrote:
       | The title could clarify it's for MacOS X.
        
         | neallindsay wrote:
         | Linux users probably already have some weird workflow with X11
         | virtual buffers to do this.
        
           | jauntywundrkind wrote:
           | Yeah. On Wlroots or Sway, we can setup virtual displays
           | pretty easily (swaymsg create_output, done). Run wayvnc, and
           | both the other person and yourself connect over vnc or rdp to
           | see what's over there.
           | 
           | Available May 2020, https://github.com/any1/wayvnc/issues/7#i
           | ssuecomment-6256611...
        
             | moritzruth wrote:
             | For Hyprland, the command is `hyprctl output create
             | headless NAME`
        
           | Devorlon wrote:
           | It's not exactly the same, but as an alternative to what
           | jauntywundrkind you can use V4L2-Loopback and OBS to create a
           | virtual webcam and use that to share your screen. I find it
           | really handy being able to switch between either just my cam,
           | my desktop or both.
        
           | marcodiego wrote:
           | Xnest is probably enough. I've used it for similar purposes a
           | few times. Don't know the equivalent for Wayland though.
        
             | Arnavion wrote:
             | Yes, Wayland compositors like cage and sway can be nested
             | too.
             | 
             | That said, with both the X nesting approach and the Wayland
             | nesting approach, you'd also need to run the screencasting
             | application itself inside the nested server, not the just
             | the application you want to cast. If the compositor
             | supports a way to create headless outputs (as sway and
             | hyprland do) that is much easier.
        
           | tasn wrote:
           | This is how I do it under Sway (Wayland):
           | 
           | #!/bin/bash
           | 
           | swaymsg create_output OUTPUT=$(swaymsg -r -t get_outputs | jq
           | '.[].name' | grep HEADLESS | tr -d '"')
           | 
           | # No need to reduce res, it defualts to 1080p #swaymsg output
           | "$OUTPUT" resolution 1280x720
           | 
           | wl-mirror "$OUTPUT"
           | 
           | swaymsg output "$OUTPUT" unplug
           | 
           | When I was still in X11 land I used to just use Xephyr.
        
             | arjvik wrote:
             | Ooh, creating a headless display and then wl-mirroring it
             | is incredibly smart! Have been looking for something like
             | this!
        
             | tasn wrote:
             | I just realized formatting is a bit broken. :(
             | 
             | Fixed:
             | 
             | #!/bin/bash
             | 
             | swaymsg create_output
             | 
             | OUTPUT=$(swaymsg -r -t get_outputs | jq '.[].name' | grep
             | HEADLESS | tr -d '"')
             | 
             | # No need to reduce res, it defualts to 1080p
             | 
             | # swaymsg output "$OUTPUT" resolution 1280x720
             | 
             | wl-mirror "$OUTPUT"
             | 
             | swaymsg output "$OUTPUT" unplug
        
               | craftkiller wrote:
               | You can do code blocks on HN by prefixing your lines with
               | four spaces.                   #!/bin/bash
               | swaymsg create_output         OUTPUT=$(swaymsg -r -t
               | get_outputs | jq '.[].name' | grep HEADLESS | tr -d '"')
               | # No need to reduce res, it defualts to 1080p         #
               | swaymsg output "$OUTPUT" resolution 1280x720         wl-
               | mirror "$OUTPUT"         swaymsg output "$OUTPUT" unplug
        
               | mmh0000 wrote:
               | Four spaces!? Absurd! Think of how many bytes you're
               | wasting! In just your last code block your flooded the
               | internet with 28 needless bytes!?!?!?!! If this keeps up
               | soon we'll all just be downloading whitespace.
               | 
               | Only two spaces are needed:
               | https://news.ycombinator.com/formatdoc
               | function trim {         sed -e 's/^[[:space:]]*//' -e
               | 's/[[:space:]]*$//'       }
               | 
               | /end sarcasm
        
           | pepve wrote:
           | I use `xrandr --setmonitor` to create a fake monitor that
           | only covers part of my screen. And I have some window manager
           | setup to easily move my windows there (with awesomewm).
        
             | kristopolous wrote:
             | That's a good solution. I used xnest
        
           | craftkiller wrote:
           | Personally I don't bother with a virtual display. I
           | automatically set my display scale to 2x when I start screen
           | sharing. I set that up with exec_before and exec_after hooks
           | in xdg-desktop-portal-wlr[0]. In addition to turning off my
           | notification daemon (so my email/instant message
           | notifications don't pop up), my exec_before/exec_after
           | scripts just run:                   swaymsg output "MY-
           | MONITOR" scale 2 # or 1 for exec_after
           | 
           | With that, everything puffs up big and readable when I'm
           | screensharing and seamlessly shrinks back down when I stop
           | screen sharing. No need to juggle windows around to different
           | displays.
           | 
           | [0] https://man.archlinux.org/man/extra/xdg-desktop-portal-
           | wlr/x...
        
         | mdeeks wrote:
         | Small FYI: it's just called macOS now
        
       | ekinertac wrote:
       | what a briliant idea, most of my meeting i had to share my 4K
       | screen with laptop pals and most of the time i had to zoom so
       | they can see. now it's solved.
        
       | transfire wrote:
       | Wouldn't it be nice if we could adjust resolution per window?
       | 
       | On a 4k monitor some applications have tiny text and icons, and
       | no way adjust that I can find.
        
         | rcarmo wrote:
         | I just went to Preferences and set the resolution of the
         | virtual display to 1920x1080.
        
           | transfire wrote:
           | But doesn't that affect ALL windows?
        
       | mmastrac wrote:
       | Very cool. Does it require the "screen recording" indication to
       | be up the entire time whether screen recording is happening or
       | not? I don't see any info in the repo but I recall some previous
       | solutions would effectively appear to be recording all the time.
       | 
       | EDIT: unfortunately it does. But if it's designed for screen
       | sharing, it's probably not a big deal. Unfortunately there's no
       | easy way to mirror on OSX without this, AFAIK. This particular
       | issue is annoying for certain USB-C video adapters that create a
       | virtual screen and mirror it over an arbitrary protocol.
        
       | garysahota93 wrote:
       | I really like this concept. especially for the use case where I
       | need to share my whole screen, but just want a "sandbox" of sorts
       | to share. Typically have gotten around this with a secondary
       | monitor that I share with, but that doesn't work when I'm on the
       | go with my laptop. Will def be using this
        
       | leptons wrote:
       | With my 6480 x 3840 (three 4k screens) desktop resolution, in
       | Zoom I just select "Share a portion of screen", and I can resize
       | the area that gets shared to something close to a common screen
       | size.
        
         | xahrepap wrote:
         | I used that until we moved to Teams for all video calls. And it
         | doesn't have that feature :(
         | 
         | I've looked around for an app like this. But they're all paid
         | and the security prompts are a little scary.
        
       | imzadi wrote:
       | I need this. I have a 49" monitor and sharing the screen is such
       | a pita
        
       | jeanlucas wrote:
       | So neat!
        
       | shmoogy wrote:
       | Thank you for this - sharing a window makes drop downs and other
       | things not work. I look forward to trying this out for a better
       | solution.
        
       | benjonesutah wrote:
       | Here is a related project I use to share selected content
       | (usually single windows and my iPad) on a projector while
       | teaching: https://github.com/benjones/presenterMode/
        
       | jakelsaunders94 wrote:
       | Oh lawd I've had to say 'sorry you'll have to bear with my
       | ultrawide' during pairing at least 10 times in the last week. You
       | are a lifesaver.
        
       | neLrivVK wrote:
       | I've been using https://github.com/waydabber/BetterDisplay for
       | this purpose. Does something similar and more. Works great!
        
         | mellosouls wrote:
         | But not open source? I mean, its fine if its closed, but no
         | point in linking to a github repo, and if so its not a like-
         | for-like.
         | 
         | Edit: I see looking at the branches an old version was open
         | source some years ago.
        
         | blsv wrote:
         | Which feature do you use? Would like to try it as well.
        
         | ilyagr wrote:
         | I know it can create a dummy display, but can it create a
         | window on the real display showing the contents of the virtual
         | display?
         | 
         | That seems to be the flagship feature of DeskPad.
        
       | supermatt wrote:
       | This looks great - really useful!
       | 
       | I have always wondered how these virtual desktops work. A cursory
       | looks shows that this is using some undocumented APIs. How do
       | people learn they can create a virtual desktop in this way if the
       | knowledge to do so is hidden/obfuscated?
       | 
       | Does apple allow distribution of an app that use these "private"
       | APIs?
       | 
       | Is anyone aware of what mechanisms are there for achieving
       | something similar in windows?
        
         | sleepybrett wrote:
         | > Does apple allow distribution of an app that use these
         | "private" APIs?
         | 
         | In the app store, sure, any other way, what can they going to
         | do about it?
        
           | supermatt wrote:
           | They could not notarize it, meaning users have to tackle
           | bypassing the Gatekeeper?
        
       | conductr wrote:
       | I think the problem I have is more so that people want my font
       | sizes to be 3x what I have them. Usually I'm presenting a
       | spreadsheet (financial statements and such) and people ask me to
       | zoom in. Which I can but it breaks the whole thing and throws me
       | off because I can no longer read my document anymore and I'm
       | trying to present it. For that reason, I evangelize that
       | attendees use the Zoom feature on their device if it's too small.
       | 
       | As I understand the issue it's not that font is too small on my
       | device, it's that Teams has a tiny viewport and so it gets shrunk
       | down. Most people aren't doing full screen. They have a sidebar
       | for chat and such and a top bar of other options. These don't
       | leave much real estate for my presentation.
       | 
       | Would something like this help my problem or anyone know a better
       | solution?
        
         | rcarmo wrote:
         | OK, I have a series of steps you can follow:
         | 
         | - Start DeskPad
         | 
         | - Go to System Settings and set the resolution of the virtual
         | display to 1920x1080 (just to be a standard size/resolution and
         | not retina, saves on resources and hassle)
         | 
         | - Still in System Settings, set Accessibility Zoom to render a
         | magnified version on the virtual display:
         | 
         | https://support.apple.com/guide/mac-help/zoom-in-on-whats-
         | on....
         | 
         | - Resize the DeskPad window to be a nice little preview on the
         | corner of your screen.
         | 
         | - Start your call, share the virtual display (which will be the
         | zoomed version of what you are pointing at with your mouse)
        
         | LorenPechtel wrote:
         | I ended up buying a bigger monitor for screen share. For most
         | purposes I prefer my setup with multiple 19" monitors running
         | at 1280x1024 but it's a nightmare if someone with a higher
         | desktop wants to share. I have found the bigger monitor nice
         | for games also.
        
         | madhias wrote:
         | I am presenting SAP t-codes on a daily basis and can relate -
         | especially for presentations I tried to show always only the
         | most important things and use fonts like 2 or 3 times bigger,
         | especially with monospace fonts not so easy to find good
         | readable narrow fonts.
        
         | wmf wrote:
         | Yeah, if you create a virtual monitor with low resolution like
         | 1280x720 or 1024x768 people will be able to see what you're
         | sharing.
        
         | mbreese wrote:
         | I often call into meetings where I am also presenting twice.
         | Once on my phone and once from my computer. I use my computer
         | for sharing, audio, video, etc. I use my phone to see what the
         | other people see. Shared screens are always difficult to
         | predict. If you have a 4K screen, it will almost always get
         | downsampled somehow for meetings... it can be too slow
         | otherwise.
         | 
         | In my experience, the problem isn't that the font is too small
         | on your device, but rather that you're sharing too much screen.
         | Even if I'm sharing a terminal window (common for me), instead
         | of changing the font, I try to make the window smaller. This
         | has the same effect and is much easier to control. On the
         | viewing device, the video you send it always scaled (either for
         | a different resolution or viewport size), so it helps to limit
         | the size of the screen/window that you're sharing.
         | 
         | Telling viewers to zoom in if they can't read anything sounds
         | like you're blaming them for the problem. If you have a
         | different device connected, you might be in a better position
         | to find a solution on your end.
        
           | eastbound wrote:
           | +1 to learning how to share a window, doing it fast when
           | you're changing windows, and reducing the size of the window.
           | It shows that you care for the audience.
        
           | conductr wrote:
           | > Telling viewers to zoom in if they can't read anything
           | sounds like you're blaming them for the problem
           | 
           | yeah I wouldn't disagree, have been ignorant to the solution
           | on this one. It's a recent concern as I'm new to Teams and
           | working at a company with an older demographic than I'm used
           | to so I'm kind of new to getting this request so much tbh.
           | When people complain about having "aging eyes" my default
           | response has been to zoom up to 150% but beyond that I can't
           | even use my own computer as a presentation device for myself
           | which is a showstopper, so my initial thought was tell them
           | to use the Zoom, it's what you do on your phone to read small
           | text, browser to read news, etc. and honestly I zoom in when
           | I can't read someone elses screen (I've never asked someone
           | to increase a font size mid-presentation). Part of the
           | problem is the content kind of requires a lot of columns of
           | data to be visible at once. Bouncing around from YTD to MTD
           | sections by section kind of breaks the flow of the meeting,
           | especially because while I'm presenting they are all
           | individually consuming the content differently (one guy only
           | care's about Margins, one guy only cares about Expenses, etc
           | so it helps to have a lot on the screen at once and let them
           | zoom into what they care about)
           | 
           | All said, I'm definitely going to try out all the suggestions
           | here and see if I can figure out a better solution. Thanks
           | HN!
        
       | jeanregisser wrote:
       | Nice! I'm currently using https://www.appblit.com/screegle
       | 
       | It works well and has more features but I like having an open
       | source alternative. Thanks
        
       | savrajsingh wrote:
       | Zoom has this as a built-in feature -- you can share just a
       | region you specify of your whole display. Share screen ->
       | advanced -> "portion of screen"
        
         | mathfailure wrote:
         | Is it open source? Oh, no?
        
       | mleo wrote:
       | This is great; though I have less need for it day to day now.
       | 
       | I used to have 49" 5120x1440 display. We started with Zoom, which
       | under Advanced would allow partial desktop sharing. I would draw
       | a 1920x1080 box and move windows in and out of the box.
       | 
       | We moved to Teams and Teams only supports Window or Screen
       | sharing. DeskPad would work great for that situation. Create a
       | virtual display, share it and then use it on right part of the
       | physical screen, moving windows in and out as needed.
       | 
       | Currently, I use 2 Studio Displays instead of the 1 Wide Screen.
       | When I need to share screens, I press a button on Stream Deck
       | that calls displaypacer to set the resolution on the second
       | display to 1600x900. When done, I press the button again and it
       | toggles the resolution back to 5K. The resolution switching is
       | instantaneous with Apple Silicon/Studio Display making it hassle
       | free.
        
         | prmoustache wrote:
         | Why do change the resolution instead of the scaling?
        
       | swijck wrote:
       | Having had to order whiteboards to airbnbs for offsites, yes this
       | is cool!
        
       | jameslk wrote:
       | I have an Intel MBP, so my first question is will this work on my
       | legacy hardware? And my second question is will this act like a
       | typical external display I connect to my MBP and set it on fire?
       | As far as my experience goes, it's not behaving like an external
       | display unless my CPU is occasionally pegged at 100%, fans are
       | blasting, and my computer becomes intermittently unusable until I
       | disconnect the display.
        
         | doubleorseven wrote:
         | I used to have an Intel MB, mid 2010. I had to disconnect the
         | hdmi cable so it can boot, otherwise it would just blast the
         | fan displaying the apple loading animation. It died on 2022
         | when i installed an update that asked for a restart and i
         | forgot to disconnect and went on vacation. RIP Intel MPs.
         | Amazing beasts.
        
       | sandos wrote:
       | This has to have been made for MS teams, right? It is unusable if
       | youre screen is too large!
        
       | madman2k wrote:
       | Nice. I'm testing it watching a YouTube video in "full screen" in
       | its window, while also leaving room for a browser and email
       | window on that monitor.
        
         | albert_e wrote:
         | This is an excellent use case that I also often felt the need
         | for.
         | 
         | You can remove all the YT clutter this way, have all the
         | controls and keyboard shortcuts, and extensions like Video
         | Speed Controller still functional while precisely controlling
         | the position and size of the video. Would be great for
         | following long lectures and tutorials.
         | 
         | any good solution for this for a Windows machine?
        
           | spaceywilly wrote:
           | I use the "maximize video" chrome extension which may work
           | for you. You can click on any video player and it will make
           | that take up the whole browser window size. So then the video
           | size == the browser window size. I use it to panel multiple
           | videos around my screen (mostly for watching multiple NFL
           | games at the same time).
           | 
           | I also use Better Touch Tool which supports keyboard
           | shortcuts for arranging windows, I believe there's a similar
           | tool for windows. So for example if I want 4 equal sized
           | windows (in each quadrant of the monitor) I can do it easily
           | with keyboard shortcuts.
        
       | thomasjv wrote:
       | Just don't drag the DeskPad window to the virtual monitor
        
       | spease wrote:
       | Cool! I usually have to share window-by-window, this may come in
       | handy.
        
       | evanjrowley wrote:
       | This is very useful, thank you.
        
       | nashashmi wrote:
       | Windows has a similar tool. But it's two steps.
       | 
       | 1. Set up a new virtual monitor (see
       | https://github.com/itsmikethetech/Virtual-Display-Driver)
       | 
       | 2. See virtual monitor using google chrome desktop.
        
       | wpm wrote:
       | I've gotten away with simply firing up OBS and "screen sharing"
       | the virtual camera. Has worked fine on Zoom and Slack huddles,
       | with the added benefit of giving me other things that OBS can
       | provide: easy recording, scenes, text, source management,
       | plugins, etc. For a casual conversation it's somewhat overkill,
       | but when you're doing something more serious or formal, or need
       | to switch between a keynote/Powerpoint and a screen share, or a
       | video capture device, it's wonderful, and actually rather easy to
       | get going in.
        
         | lolinder wrote:
         | > and actually rather easy to get going in.
         | 
         | The other day I tried installing OBS on a Mac and this was not
         | my experience. I couldn't even get it to recognize the built-in
         | MacBook camera, much less share a screen or a mic or...
         | 
         | I've successfully got OBS set up on Linux in the past and
         | managed to get a simple workflow running, but even that took a
         | lot of fiddling to get started and I had the darndest time
         | finding what I needed. The UI reminded me of GIMP--I'm sure I
         | could eventually figure out how to work it and it probably
         | makes complicated workflows possible in ways that simpler tools
         | don't, but for a newcomer it has been overwhelming.
        
       | ziknard wrote:
       | It would be so nice if we could stop destroying the planet by
       | dropping support for legacy Macs. Mine is a 2014 Air and I'll
       | stop using it when it crumbles to dust.
        
       | gechr wrote:
       | After trying various solutions - including DeskPad - I came up
       | with a custom cross-platform (I'm on macOS, but assume it'll work
       | elsewhere) solution that worked incredibly well on my 40"
       | ultrawide monitor: OBS[1].
       | 
       | Having never used OBS before but knowing it was popular among
       | streamers, I wondered if I could use it to (1) only share the
       | specific applications I wanted to share and (2) share them at a
       | resolution that people could actually read, without constantly
       | being asked to zoom in.
       | 
       | I first tried setting up a virtual camera and sharing via my
       | video stream, but it was laggy and the quality was so poor that
       | people couldn't read what I was sharing. I quickly gave up on
       | that approach.
       | 
       | Then I discovered Projectors[2]. By right-clicking on the main
       | view in OBS and selecting "Windowed Projector (Preview)", it
       | launches a separate window, which I can then share directly via
       | Zoom, Teams, Meet, etc.
       | 
       | Whatever I drag into the OBS view is displayed in the Windowed
       | Projector (similar to DeskPad), with the added bonus that I can
       | choose to blur certain applications that might be dragged in. For
       | example, if I open Slack or my password manager, the entire
       | window blurs until I focus back on my terminal or browser.
       | 
       | It took a bunch of tweaking to perfect, but I'm very pleased with
       | how well it works now.
       | 
       | ---
       | 
       | [1] https://obsproject.com/
       | 
       | [2] https://obsproject.com/kb/power-of-projectors
        
       | spaceisballer wrote:
       | I like using FancyZones which is in the Microsoft PowerToys
       | suite. That way you can snap things to a 1080p resolution part of
       | your ultrawide screen. My other simple option is just open the
       | laptop screen which is 1080p
        
       ___________________________________________________________________
       (page generated 2024-10-10 23:00 UTC)