Hi Drew, On woensdag 8 november 2017 15:12:03 CET Drew DeVault wrote: > Thanks for the info, guys! > > My main use-case for this protocol is to be able to share an > arandr-like tool between KDE and any compositor using wlroots (Sway, > way-cooler, waymonad, etc). > > Did you guys write a screen configuration tool that leverages this > protocol? Can it be easily detached from the rest of KDE?
Yes, we did. We have a library (libkscreen) which has backends for xrandr and wayland). It uses our kwayland frameworks (which is a wayland abstraction and depends on Qt). libkscreen has a high-level screen management API. In Plasma, there's a systemsettings module, which probably is a bit too Plasma specific for your case), but libkscreen also contains a command-line program (called kscreen- doctor) that allows screen configuration, it looks like this: iro.sebas(~/.config/QtProject): kscreen-doctor --help [15:53:58] Usage: kscreen-doctor [options] [output.<name>.<setting> output.<name>.setting [...]] kscreen-doctor allows to change the screen setup from the command-line. Setting the output configuration is done in an atomic fashion, all settings are applied in a single command. kscreen-doctor can be used to enable and disable outputs, to position screens, change resolution (mode setting), etc.. You should put all your options into a single invocation of kscreen-doctor, so they can all be applied at once. Usage examples: Show output information: $ kscreen-doctor -o Output: 1 eDP-1 enabled connected Panel Modes: Modes: 1:800x600@60 [...] Geometry: 0,0 1280x800 Output: 70 HDMI-2 enabled connected HDMI Modes: 1:800x600@60 [...] Geometry: 1280,0 1920x1080 Disable the hdmi output, enable the laptop panel and set it to a specific mode $ kscreen-doctor output.HDMI-2.disable output.eDP-1.mode.1 output.eDP-1.enable Position the hdmi monitor on the right of the laptop panel $ kscreen-doctor output.HDMI-2.position.0,1280 output.eDP-1.position.0,0 Set resolution mode $ kscreen-doctor output.HDMI-2.mode.1920x1080@60 Options: -h, --help Displays this help. -i, --info Show runtime information: backends, logging, etc. -j, --json Show configuration in JSON format -o, --outputs Show outputs -d, --dpms <off> Display power management (wayland only) -l, --log <comment> Write a comment to the log file Arguments: config Specific output settings are separated by spaces, each setting is in the form of output.<name>.<setting>[.<value>] For example: $ kscreen-doctor output.HDMI-2.enable \ output.eDP-1.mode.4 \ output.eDP-1.position.1280,0 Multiple settings are passed in order to have kscreen-doctor apply these settings in one go. libkscreen can be used to create a GUI to manage screens. There's also a Plasma specific daemon which tracks screen configuration changes and handles hotplugging (it detects plugged and unplugged screens and then applies a config that the user has previously set up. It also does some sensible things around lid close and suspend events. kwayland and libkscreen are unit-tested, libkscreens xrandr backend's unit tests are somewhat spotty, but the wayland / kwayland coverage is actually really good, since it's much easier to synthesize a wayland server than an X11 server, and the protocols are of course much more reliant. If you have any questions, please let me know. Cheers, -- sebas http://www.kde.org | http://vizZzion.org