summaryrefslogtreecommitdiff
path: root/content/posts/how-to-set-primary-x-display-on-sway
diff options
context:
space:
mode:
Diffstat (limited to 'content/posts/how-to-set-primary-x-display-on-sway')
-rw-r--r--content/posts/how-to-set-primary-x-display-on-sway/index.md53
1 files changed, 53 insertions, 0 deletions
diff --git a/content/posts/how-to-set-primary-x-display-on-sway/index.md b/content/posts/how-to-set-primary-x-display-on-sway/index.md
new file mode 100644
index 0000000..f4ec9ca
--- /dev/null
+++ b/content/posts/how-to-set-primary-x-display-on-sway/index.md
@@ -0,0 +1,53 @@
+---
+title: "How to Set Primary X Display on Sway"
+date: 2021-08-23T20:56:40-04:00
+type: "post"
+draft: false
+tags: [free-software, sway, software, software-release]
+---
+
+In my PC setup, I have three displays.
+My somewhat recent post about my setup is outdated now; from left to right I have a 1440x900 60Hz monitor oriented vertically, a 1920x1080 120Hz monitor, and a 1920x1080 60Hz monitor.
+
+I noticed games would frequently try to run at the resolution and refresh rate of my leftmost vertical monitor, which is not what I want.
+There is no way to set a "primary display" in Sway, because that construct doesn't exist in Wayland.
+Applications simply open on the display you have focused.
+
+However, many application (particularly games) will try to query for the primary display.
+XWayland will (in my experience) default to setting the primary display to the one which is the closest to the "origin" (top left pixel).
+This can be remedied by running `xrandr --listmonitors` to find what X thinks the names of your displays are, and then using `xrandr --output XWAYLANDN --primary` where N is the number of the correct display, to set the primary display.
+
+I wrote a basic script to handle this:
+
+```
+#!/bin/sh
+
+display=$(xrandr --listactivemonitors | grep "$1" | head -n1 | cut -d' ' -f6)
+
+if [ -n "$display" ]; then
+ xrandr --output $display --primary
+fi
+```
+
+I have this saved in ~/.local/bin/set-correct-monitor so I can use it anywhere.
+What this does is `grep` the output of `xrandr --listactivemonitors` for the script argument, and set the display to the first display that matches.
+For example, I run `set-correct-monitor 300+900` to set my display, since that is the position of the monitor I want to be considered my primary.
+
+Doing this will work until you do one of several things:
+
+1. logout
+2. otherwise kill Sway
+3. disconnect a monitor
+
+The first two were pretty okay for me to deal with for some time, since usually I only logout once a day, and many games *don't* run into an issue with this, particularly if they are run in "windowed mode" (which I recommend).
+The last was pretty frustrating for me though, because I use a KVM switch to change between my work laptop and my PC.
+Every time I switch between devices, my primary display usually defaults back to my vertical monitor.
+
+To make this setting persist, I made a small C program which will execute a command each time a new display is attached.
+The program can be found here: https://git.robbyzambito.me/robby/wayland-run-on-new-display
+
+By adding this line to my ~/.config/sway/config, my primary display is always properly set when I run Sway:
+
+```
+exec wayland-run-on-new-display set-correct-monitor 300+900
+```