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.
---
When I'm teaching a class, I will share the screen that has the projector fully screened on it (which is normally the screen for my teleprompter (so I'm looking into the eyes of my students)). I have a bunch of scenes set up, so I can quickly change the scenes using my Stream Deck. You can make really smooth transitions, so I have a scene for:
- Full camera
- Full camera shifted ~60% to the right with a small desktop screen (where I'm showing my slideshow or code) on top
- Full desktop with face in upper right or lower right (another Stream Deck button to toggle face position)
- Full desktop, no face
I also have countdown timers that I can set from the command line when we are taking a break or waiting for the class to start.
OBS is awesome.
However, I also record many courses and must do them in HD res. Sadly, my MBP has a notch and won't natively do HD. OBS doesn't help with this (easily). My current solution (which I'm curious to try DeskPad to see if it is better) is to use the BetterDisplay app and create a "virtual screen" with HD dimensions. BD lets me "mirror" the virtual HD screen to my Mac monitor, and it magically resizes the dimensions correctly to HD.
It's a painful workaround (especially because every time my Mac or other monitors sleep, all of the orientations of the monitors and the mirroring of the virtual screen are forgotten).
I would love a way to tell my MBP screen to go HD, but to my knowledge, that doesn't appear possible.
Obviously this feature has to be enabled and wasn’t intended for this purpose but it works perfectly!
---
Thanks for sharing your method!
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.
You pick the “effective resolution“ of the display, but the native screen resolution is always used and the DPI is changed to scale things up or down until they are scaled the same they would be on a monitor of the chosen resolution.
There are a few choices in that list, denoted by “(low resolution)” or something, which set the indicated resolution and leave scaling at 100%. Those look horrific on MacOS but they are options.
I can set my display to 1728x1080. That's HD.
I can also output my Mac to an HD TV, Projector, etc. And I have the notch on my MacBook Pro.
Do you have some other definition of HD that I'm not understanding?
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...
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.
#!/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.
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
#!/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
Only two spaces are needed: https://news.ycombinator.com/formatdoc
function trim {
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
}
/end sarcasm 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...
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.
Available May 2020, https://github.com/any1/wayvnc/issues/7#issuecomment-6256611...
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?
- 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)
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.
Combine that with a workflow that involves 2 or more windows (e.g., switching between a terminal & a browser … or just wanting to display them both at the same time¹), and it's not really workable.
¹… and while there's no technical reason I couldn't share two windows … there's no support for it.
- The last window is always suggested FIRST when sharing,
- Learn what to look at: Look at the appearance of your browser window before you go click Share my screen.
The second will provide a visual confirmation that you’re clicking the right button. Don’t pass as a boomer when you can be a Millennial!
It most definitely isn't. (I just checked, just to humor you.)
> - Learn what to look at: Look at the appearance of your browser window before you go click Share my screen.
I'm often staring at it the window I intend to share as I'm going through the list so as to be able to find it. I don't think it's as useful as you think it is.
> Don’t pass as a boomer when you can be a Millennial!
… right …
You're probably making some assumptions about the exact OS/browser/VC SW combination that I'm using, your suggestions simply don't apply to the one I am using.
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!
AFAIK, teams literally does not have a way to put the viewport in full screen mode!
People can zoom, yes, but it's going to require scrolling which can be distracting even if it's set to "follow pointer" -- and your pointer may be zipping all over (like, going to the toolbar when the users are looking at a row near the bottom of the screen).
I know it is a challenge to limit yourself to a small canvas -- we all love using a big screen for certain tasks -- but I believe it's going to be easier and make for a more engaging and productive session when you control both the viewport size and the scroll position at all times. One nice thing about Zoom is that it is dynamic, so if you are sharing a window and you realize you need more horizontal real-estate for a certain part of your preso, you can momentarily resize your window for that, and then go back to a more manageable size when done, with no re-sharing needed.
selection=$(slop -f %w,%h,%x,%y)
width=$(echo "${selection}" | cut -d , -f 1)
height=$(echo "${selection}" | cut -d , -f 2)
top=$(echo "${selection}" | cut -d , -f 4)
left=$(echo "${selection}" | cut -d , -f 3)
cvlc --no-video-deco --no-embedded-video --screen-fps=20 --screen-top=$top --screen-left=$left --screen-width=$width --screen-height=$height screen:// &
Then "just" share the VLC window instead of your desktop.EDIT: As noted below by @cole-k, the situations aren't the same, because the parent comment here is talking about approximating DeskPad-like functionality on a platform not (currently) supported by DeskPad.
#!/bin/sh
new_disp=:2
size="1600x900"
unset XDG_SEAT XMODIFIERS GTK_IM_MODULE
set - "$@" \
-noreset -br -ac -dpi 120 \
-xkb-layout us \
-screen "$size" \
"$new_disp" \
#
Xephyr "$@" &
sleep .5
export DISPLAY="$new_disp"
metacity &
urxvt &
Metacity is kinda deprecated but still my "simple WM" of choice. You may need to set an xauth key for :2. ("xauth add :2 . <32-random-hex-chars>")(Script slightly edited & shortened, probably broke something :D)
See the MATE project. It's a continuation of GNOME before GNOME stopped being what made it wonderful. The fork of Metacity, specifically, is named "Marco".
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?
In the app store, sure, any other way, what can they going to do about it?
I’ve looked around for an app like this. But they’re all paid and the security prompts are a little scary.
It works well and has more features but I like having an open source alternative. Thanks
That seems to be the flagship feature of DeskPad.
Edit: I see looking at the branches an old version was open source some years ago.
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.
Works great for vendors/techs to work on upgrades, I can keep working.
Also allows me to alt tab or minimize and not steal the mouse focus, and they cant see my screen.
1. Set up a new virtual monitor (see https://github.com/itsmikethetech/Virtual-Display-Driver)
2. See virtual monitor using google chrome desktop.
Combined with FancyZones and you can snap windows to the region so that they're "fullscreen" for viewers.
If you are one of the "I don't want a monitor that is too big" people: a larger (30+ inch diagonal) monitor allows you to place it further from your eyes which is the number one eye health and comfort factor. So the relative size of the display does not change, you won't have to move your head to see all of it. And you can scale up your display to >1 factor so the text won't be small either for hidpi displays. There's absolutely no downside to having a large diagonal large dpi display, aside from needing a wider desk if you have a very narrow one now.
And possibly a deeper one. My 24" is pushed as far back as my desk will allow and a bigger monitor would be too close to me for comfort. At least it's not 1080p, although at 11 years old, I'll be looking to upgrade it fairly soon.
More and more I’ve gotten lazy and share my main screen. My editor is big enough for people to see, but browsers are an issue. I have less of an issue zooming those as needed.
> so macOS will take care of properly arranging your windows to their previous configuration.
That's a definition of "properly" that I'm not familiar with.
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?
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.
I'm on Xfce (X) with three monitors. When I share I can pick just the right-most. Shares everything in that panel. Just need to be careful what is on 3. Then, I zoom in the app (browser, VCCode) for viewers.
But I like this idea of a virtual, so I don't accidentally leak a window I shouldn't.
On a 4k monitor some applications have tiny text and icons, and no way adjust that I can find.
It could "work" in the same vein, but the UX isn't as nice as what TFA's tool is, I think.
(You can absolutely use Xephyr on a Wayland session of course, since the latter is compatible with X11 clients. But the virtual display Xephyr provides is X11.)
Just let me config my screen in sections at the hardware or driver level, and accept them as different monitors