From fcaca31c8cee50b8bb8d5c61354c9d96c790bd36 Mon Sep 17 00:00:00 2001 From: Robby Zambito Date: Mon, 23 Aug 2021 22:25:52 -0400 Subject: Add "How to Set Primary X Display on Sway" --- .../how-to-set-primary-x-display-on-sway/index.md | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 content/posts/how-to-set-primary-x-display-on-sway/index.md 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 +``` -- cgit