BSPWM, laptop has 1920x1080 resolution, external screen has 1680x1050.
xrandr --output DP-1 1680x1050
cuts image, if I change resolution to 1920x1080, I get “full” image, but quality is just bad.
I have another machine with XFCE, it’s display utility does the trick and I wonder can I achieve smth similar on BSPWM with some simple console command?
I use i3-wm and just set my laptop display and external monitor to their native modes manually with xrandr. Been doing it this way for years without an issue. The only time I’ve seen the output get chopped like you mention is with mirroring, where you have to use the lowest common mode - but I don’t mirror, I set each display independently as a separate output for i3 (but on the same X DISPLAY).
I also don’t mirror, just switch from laptop to external and vice versa. Strange because lighdtm doesn’t break anything for XFCE, quite interesting what is the reason
maybe I’m just one of very few that have external resolution lower than host
maybe I’m just one of very few that have external resolution lower than host
You aren’t.
How do you have your displays set up? Your xrandr command didn’t seem complete. You say you aren’t mirroring; are you then using both the laptop and external monitor at the same time? If so, I’d expect a command more like:
xrandr \ --output eDP1 --auto \ --output DP-1 --auto --right-of eDP1
or if it’s really not auto-detecting⋮
xrandr \ --output eDP1 --mode 1920x1080 \ --output DP-1 --mode 1680x1050 --right-of eDP1
Can you post your full
xrandr
command? Also,arandr
andgrandr
can be a little easier to fiddle with if you’re trying to arrange things.I turn of internal display and enable external by script, I don’t use mirroring or extending
Here is xrandr output:
spoiler
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384 eDP-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 173mm 1920x1080 60.00*+ 59.97 59.96 59.93 1680x1050 59.95 59.88 1400x1050 59.98 1600x900 59.99 59.94 59.95 59.82 1280x1024 60.02 1400x900 59.96 59.88 1280x960 60.00 1440x810 60.00 59.97 1368x768 59.88 59.85 1280x800 59.99 59.97 59.81 59.91 1280x720 60.00 59.99 59.86 59.74 1024x768 60.04 60.00 960x720 60.00 928x696 60.05 896x672 60.01 1024x576 59.95 59.96 59.90 59.82 960x600 59.93 60.00 960x540 59.96 59.99 59.63 59.82 800x600 60.00 60.32 56.25 840x525 60.01 59.88 864x486 59.92 59.57 700x525 59.98 800x450 59.95 59.82 640x512 60.02 700x450 59.96 59.88 640x480 60.00 59.94 720x405 59.51 58.99 684x384 59.88 59.85 640x400 59.88 59.98 640x360 59.86 59.83 59.84 59.32 512x384 60.00 512x288 60.00 59.92 480x270 59.63 59.82 400x300 60.32 56.34 432x243 59.92 59.57 320x240 60.05 360x202 59.51 59.13 320x180 59.84 59.32 DP-1 connected (normal left inverted right x axis y axis) 1680x1050 59.95 + 1920x1080 60.00 50.00 59.94 1920x1080i 60.00 50.00 59.94 1600x1000 60.01 1280x1024 75.02 60.02 1440x900 59.90 1280x960 60.00 1152x864 75.00 1280x720 60.00 50.00 59.94 1152x720 59.97 1024x768 75.03 60.00 832x624 74.55 800x600 75.00 60.32 720x576 50.00 720x480 60.00 59.94 640x480 75.00 60.00 59.94 720x400 70.08 HDMI-1 disconnected (normal left inverted right x axis y axis) DP-2 disconnected (normal left inverted right x axis y axis) HDMI-2 disconnected (normal left inverted right x axis y axis)
So I played around arandr and resolved initial issue…but got another one (as always). I added script to my bspwmrc file:
if [[ $(xrandr -q | grep "DP-1 disconnected") ]]; then xrandr --output eDP-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DP-1 --off --output HDMI-1 --off --output DP-2 --off --output HDMI-2 --off bspc monitor eDP-1 -d 1 2 3 4 5 else xrandr --output eDP-1 --off --output DP-1 --mode 1680x1050 --pos 0x0 --rotate normal --output HDMI-1 --off --output DP-2 --off --output HDMI-2 --off bspc monitor DP-1 -d 1 2 3 4 5 fi
So if i plug external monitor and reload bspwm (which also reloads polybar), it adds second pane to my polybar (1 2 3 4 5 1 2 3 4 5), but works.
Now smth interesting, when I unplug external monitor and then again reload bspwm, it switches to internal one but now cuts window for every application.
- Question 1: how to get rid of multiple workspaces on polybar when I toggle external monitor?
- Question 2: how to force bspwm respect resolution after switching resolutions?
Great! Looks like progress.
I do suggest looking at autorandr (or similar). autorandr stores your X geometry as profiles, and can detect changes and run scripts.
I haven’t used bspwm in a long while; I ended up preferring herbstluftwm, but IIRC you have to tell bspwm to configure each screen and delete unused workspaces when you change. It felt more fussy to me, which is why I landed on hlwm.
Anyway, try adding a line to tell bspwm to “remove” the monitors you aren’t using. It doesn’t detect and remove these itself. Add the lines (after your desktop
DP-1 -d
setting:bspc monitor eDP-1 -r bspc wm -o
Swap out
eDP-1
withDP-1
when going in the other direction.The
bspc wm -o
is pretty important; it tells bspwm to re-lay everything out (or, at least, that’s what I guess it’s doing). In any case, it fixed a lot of issues when I ran it when changing layouts.I found the bspwm community to be largely unhelpful, and containing some caustic people. It very much has a “give a man a fish” mentality. Given how fussy the wm itself is, even after quite an amount of time scripting it, I still felt as if I were casting about most of the time, getting things right only by trial and error, and not being able to reliably predict how my commands would affect the wm.
If you find yourself in this situation, try herbstluftwm. The community is more helpful, and the WM itself seems more intuitive. For instance, while it allows you to define virtual monitors, it does require fewer commands to deal with physical monitor change events. You still get the “all configuration is done with commands”, but it seems more… sane and consistent. It’s just my opinion, but I appreciate the WM, whereas with bspwm I just felt like I was fighting it all the time.
Sir, you are magician, addition to script did the trick!
Will definitely play with autorandr, because if I understood you correctly, it can automatically reload bspwm listening to certain events.
Right now I’m trying master (or understand, at least) QEMU, can you recommend me some combination with sane defaults (for ex mint + installer for herb) I can play on vm?
Thank you!
Defaults for herbstluftwm? Sure, but what’d be helpful if to translate a bspwm config. Are you using sxhkd?
I can’t help with VM stuff; I’m not experienced with them.
Post your bspwm and sxhkd configs.
Ah, I thought you were displaying on both outputs, not switching between them, hence my mirroring comment. I suspect XFCE, not the DM, detects the output change and takes care of it. You might need to emulate that behavior with a hook of some type that you have to setup yourself with the tiling WM, and you might have to
--off
the unused display. I’d be willing to bet you can find some sort of hook script out there that can do this, I seem to recall an autorandr program I used in the past where you could set up output profiles. I hope that helps, maybe a little bit.I use dummy script to toggle monitors (from archwiki)
#!/bin/sh intern=eDP-1 extern=DP-1 if xrandr | grep "$extern disconnected"; then xrandr --output "$extern" --off --output "$intern" --auto else xrandr --output "$intern" --off --output "$extern" --auto fi
Hm, never used arandr but it’s similar to XFCE utlity on the first sight.
You setup profile where one display is enabled, another disabled, name him “external” and active in arandr every time connecting to external monitor, correct?
determine is the XFCE system is using sddm, lightdm, gdm3, there are other login managers as well, but those 3 are the most common.
you can then setup the same login manager kn the other system.
unless they are the same and it’s just a scaling issue due to the monitor resolution.
then I guess you could try the alternative login managers, and see if any look better.
lightdm on both machines, any tips (besides installing xfce settings) how to achieve this scaling?:) strange, but I will try sddm