You are not logged in.
I also have xdg-desktop-portal-wlr installed, we should include that too, IMO
OK I knew nothing about this one, let's put it in if it's useful. What is it good for?
There's a whole load of them:
john@carbon:~$ apt list 'xdg-desktop-portal*'
xdg-desktop-portal-dev/stable 1.20.3+ds-1 all
xdg-desktop-portal-gnome/stable 48.0-2 amd64
xdg-desktop-portal-gtk/stable,now 1.15.3-1 amd64 [installed]
xdg-desktop-portal-hyprland/stable-backports 1.3.11-1~bpo13+1 amd64
xdg-desktop-portal-kde/stable 6.3.5-1 amd64
xdg-desktop-portal-lxqt/stable 1.1.0-2+b1 amd64
xdg-desktop-portal-phosh/stable 0.46.0-2 amd64
xdg-desktop-portal-tests/stable 1.20.3+ds-1 amd64
xdg-desktop-portal-wlr/stable 0.7.1-2 amd64
xdg-desktop-portal-xapp/stable 1.1.0-1 amd64
xdg-desktop-portal/stable,now 1.20.3+ds-1 amd64 [installed,automatic]https://wiki.archlinux.org/title/XDG_Desktop_Portal <- somewhat interesting
Last edited by johnraff (2026-05-09 03:07:21)
...elevator in the Brain Hotel, broken down but just as well...
( a boring Japan blog (currently paused), now on Bluesky, there's also some GitStuff )
Offline
hhh wrote:I also have xdg-desktop-portal-wlr installed, we should include that too, IMO
OK I knew nothing about this one, let's put it in if it's useful. What is it good for?
Screenshots and screencasts...
https://packages.debian.org/sid/xdg-desktop-portal-wlr
We only need *-portal-gtk, but think of the poor scrots! ![]()
I don't care what you do at home. Would you care to explain?
Offline
xdg-desktop-portal is Snap and Flatpak support? I didn't know that.
https://packages.debian.org/sid/xdg-desktop-portal
OK, *-portal-gtk description sheds more light on the topic...
xdg-desktop-portal-gtk provides a GTK+/GNOME implementation for the desktop-agnostic xdg-desktop-portal service. This allows sandboxed applications to request services from outside the sandbox using GTK+ GUIs (app chooser, file chooser, print dialog) or using GNOME services (session manager, screenshot provider).
So this also includes AppImages, I would think.
https://packages.debian.org/sid/xdg-desktop-portal-gtk
Last edited by hhh (2026-05-09 03:16:36)
I don't care what you do at home. Would you care to explain?
Offline
We've already installed xdg-desktop-portal-gtk in the X11 system because @cog found it was needed to get dark GTK4 themes by default, and you have also referred to it in the past:
https://forums.bunsenlabs.org/viewtopic.php?id=9606&p=2
https://forums.bunsenlabs.org/viewtopic … 11#p147411
https://forums.bunsenlabs.org/viewtopic.php?id=9534
https://forums.bunsenlabs.org/viewtopic.php?id=9571
...elevator in the Brain Hotel, broken down but just as well...
( a boring Japan blog (currently paused), now on Bluesky, there's also some GitStuff )
Offline
rc.xml
Here is labwc's complete rc.xml showing all the default values:
https://github.com/labwc/labwc/blob/mas … rc.xml.all
and here is a very simple rc.xml:
https://github.com/labwc/labwc/blob/master/docs/rc.xml
We could go three ways:
1) ship a minimal rc.xml with only the values which we want to change - labwc will use default for all the others.
2) ship a full rc.xml with all the default values written in so users can immediately see what they are.
3) ship an rc.xml with our values set, and all the default values present but commented-out.
Preferences?
---
Sub-question:
a) make the labwc rc.xml as close as possible to the openbox file so similar sections appear in the same order?
or
b) make our labwc rc.xml as close as possible to the file on labwc's github?
I'm leaning towards 2) + a) but could easily be persuaded otherwise.
---
Third question:
c) keep all the keybinds, mousebinds etc as close as possible to what we now have with openbox?
or
d) keep things as close as possible to the default labwc settings?
Last edited by johnraff (2026-05-10 01:27:30)
...elevator in the Brain Hotel, broken down but just as well...
( a boring Japan blog (currently paused), now on Bluesky, there's also some GitStuff )
Offline
^suggest ![]()
3)
a)
c)
Offline
3 might be convenient for new users and c as well.
2 would be good too either a or c.
or 2 a and a reference backup copy of 3.
Truth is IMHO labwc is so simple that whatever is best for you and maintainers is best.
TC
Offline
I think 3) would be an attractive option, but something I just realized: xml commenting isn't line-by-line like most formats. You can't comment out each line separately with a #, you have to comment out a whole block with <!-- block here -->.
eg snippet from picom.conf:
# Enabled client-side shadows on windows. Note desktop windows
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
# unless explicitly requested.
#
# Can be set per-window using rules.
#
# Default: false
shadow = true;
# The blur radius for shadows, in pixels.
#
# Default: 12
shadow-radius = 12;Each line is commented separately.
But snippet from openbox's rc.xml:
<theme>
<name>bunsen-yaru-sage-dark</name>
<titleLayout>NDSLIMC</titleLayout>
<!--
available characters are NDSLIMC, each can occur at most once.
N: window icon
L: window label (AKA title).
I: iconify
M: maximize
C: close
S: shade (roll up/down)
D: omnipresent (on all desktops).
-->
<keepBorder>yes</keepBorder>
<animateIconify>no</animateIconify>
<font place="ActiveWindow">
<name>Sans</name>
<size>10</size>
<!-- font size in points -->So if option 3) is going to let users uncomment and use each entry separately, it would mean commenting-out each line individually, something like this:
<!--
This file contains all supported config elements & attributes with
default values.
Values for [yes|no] can be replaced by [true|false], [on|off] or [1|0].
-->
<labwc_config>
<!-- <core> -->
<!-- <decoration>server</decoration> -->
<!-- <gap>0</gap> -->
<!-- <adaptiveSync>no</adaptiveSync> -->Quite a lot of work for BL developers. And for users too, to delete both <!-- and --> instead of a single # when they want to enable a line.
So maybe either option 2) (full set of configs, with many of them at default setting)
or 1) (non-default configs only) + Trinidad's suggestion of a copy of the full rc.xml in the same directory for reference.
---
I think we're agreed that the keybindings and mousebindings for labwc should be as close as we can get them to what BL is now setting for openbox, so users don't have too many surprises. ie a) + c)
...elevator in the Brain Hotel, broken down but just as well...
( a boring Japan blog (currently paused), now on Bluesky, there's also some GitStuff )
Offline
^Thanks, @johnraff for your clear explanation. I hadn't considered that.
You are the master here, so my suggestion would be to put the least effort into the configuration. ![]()
If the USER has a copy in the background, he will be more willing to try out the 'New labwc' in BL.
Offline
First thing I almost forgot is that Trixie's labwc is 0.8.4, while there have been a lot of upgrades since then, so if you look at the files on github you're looking at something quite different from what we're getting. Forky is now on 0.9.7.
Anyway what I eventually did - after a lot of playing around - was take the full rc.xml from the 0.8.4 release and base our BL version on that. That is, I went with choice 2) with all the 0.8.4 default settings in the file, edited some of them and added some extra ones for launching apps etc. I tried to make it as close as possible to the BL openbox rc.xml, so the same keybinds and mousebinds should go on working, but a few things had to be changed. I leave it to you to seach for them...
This will go up on github eventually, but not for a while because I want to keep the Wayland stuff on an experimental branch at first.
For now, if anyone using labwc would like to try this rc.xml, any feedback would be welcome. Broken keybinds etc...
Just copy it from here:
<?xml version="1.0"?>
<!--
This file contains all supported config elements & attributes with
default values.
Values for [yes|no] can be replaced by [true|false], [on|off] or [1|0].
-->
<labwc_config>
<core>
<decoration>server</decoration>
<gap>0</gap>
<adaptiveSync>no</adaptiveSync>
<allowTearing>no</allowTearing>
<autoEnableOutputs>yes</autoEnableOutputs>
<!-- <hdr>no</hdr> -->
<reuseOutputMode>no</reuseOutputMode>
<xwaylandPersistence>yes</xwaylandPersistence>
<!-- <primarySelection>yes</primarySelection> -->
<!--
# See labwc-config(5) for details
<promptCommand></promptCommand>
-->
</core>
<!-- edge strength is in pixels -->
<resistance>
<screenEdgeStrength>20</screenEdgeStrength>
<windowEdgeStrength>20</windowEdgeStrength>
<!-- resistance for maximized/tiled windows -->
<unSnapThreshold>20</unSnapThreshold>
<!-- resistance for vertically/horizontally maximized windows -->
<unMaximizeThreshold>150</unMaximizeThreshold>
</resistance>
<focus>
<followMouse>no</followMouse>
<followMouseRequiresMovement>yes</followMouseRequiresMovement>
<raiseOnFocus>no</raiseOnFocus>
</focus>
<placement>
<policy>automatic</policy>
<!--
When <placement><policy> is "cascade", the offset for cascading new
windows can be overwritten like this:
<cascadeOffset x="40" y="30" />
-->
</placement>
<!-- <font><theme> can be defined without an attribute to set all places -->
<theme>
<name>bunsen-yaru-sage-dark</name>
<icon>labbe-icons-sage</icon>
<fallbackAppIcon>labwc</fallbackAppIcon>
<titlebar>
<layout>icon:iconify,max,close</layout>
<showTitle>yes</showTitle>
</titlebar>
<cornerRadius>6</cornerRadius>
<keepBorder>yes</keepBorder>
<!-- <maximizedDecoration>titlebar</maximizedDecoration> -->
<dropShadows>yes</dropShadows>
<!-- <dropShadowsOnTiled>no</dropShadowsOnTiled> -->
<font place="ActiveWindow">
<name>sans</name>
<size>10</size>
<slant>normal</slant>
<weight>normal</weight>
</font>
<font place="InactiveWindow">
<name>sans</name>
<size>10</size>
<slant>normal</slant>
<weight>normal</weight>
</font>
<font place="MenuHeader">
<name>sans</name>
<size>10</size>
<slant>normal</slant>
<weight>normal</weight>
</font>
<font place="MenuItem">
<name>sans</name>
<size>10</size>
<slant>normal</slant>
<weight>normal</weight>
</font>
<font place="OnScreenDisplay">
<name>sans</name>
<size>10</size>
<slant>normal</slant>
<weight>normal</weight>
</font>
</theme>
<!--
Just as for window-rules, 'identifier' relates to app_id for native Wayland
windows and WM_CLASS for XWayland clients.
-->
<windowSwitcher show="yes" preview="yes" outlines="yes" allWorkspaces="no">
<fields>
<field content="type" width="25%" />
<field content="trimmed_identifier" width="25%" />
<!-- <field content="identifier" width="25%" /> -->
<field content="title" width="50%" />
</fields>
</windowSwitcher>
<!--
When using all workspaces option of window switcher, there are extra fields
that can be used, workspace (variable length), state (single space),
type_short (3 spaces), output (variable length), and can be set up
like this. Note: output only shows if more than one output available.
<windowSwitcher show="yes" preview="no" outlines="no" allWorkspaces="yes">
<fields>
<field content="workspace" width="5%" />
<field content="state" width="3%" />
<field content="type_short" width="3%" />
<field content="output" width="9%" />
<field content="identifier" width="30%" />
<field content="title" width="50%" />
</fields>
</windowSwitcher>
custom format - (introduced in 0.7.2)
It allows one to replace all the above "fields" with one line, using a
printf style format. For field explanations, "man 5 labwc-config".
The example below would print "foobar",then type of window (wayland, X),
then state of window (M/m/F), then output (shows if more than 1 active),
then workspace name, then identifier/app-id, then the window title.
Uses 100% of OSD window width.
<windowSwitcher show="yes" preview="no" outlines="no" allWorkspaces="yes">
<fields>
<field content="custom" format="foobar %b %3s %-10o %-20W %-10i %t" width="100%" />
</fields>
</windowSwitcher>
-->
<snapping>
<!-- Set range to 0 to disable window snapping completely -->
<range>10</range>
<overlay enabled="yes">
<delay inner="500" outer="500" />
</overlay>
<topMaximize>yes</topMaximize>
<notifyClient>always</notifyClient>
</snapping>
<!--
Workspaces can be configured like this:
<desktops>
<popupTime>1000</popupTime>
<names>
<name>Workspace 1</name>
<name>Workspace 2</name>
<name>Workspace 3</name>
<name>Workspace 4</name>
</names>
</desktops>
Or it can also be configured like this:
<desktops number="4" />
Or like this:
<desktops>
<popupTime>500</popupTime>
<number>5</number>
<prefix>ws</prefix>
</desktops>
Or:
<desktops number="4" popupTime="500" prefix="ws" />
popupTime defaults to 1000 so could be left out.
Set to 0 to completely disable the workspace OSD.
prefix defaults to "Workspace" when using number instead of names.
Use GoToDesktop left | right to switch workspaces.
Use SendToDesktop left | right to move windows.
See man labwc-actions for further information.
-->
<desktops>
<number>2</number>
<names>
<name>1</name>
<name>2</name>
</names>
<popupTime>875</popupTime>
</desktops>
<resize>
<!-- Show a simple resize and move indicator -->
<popupShow>Always</popupShow>
<!-- Let client redraw its contents while resizing -->
<drawContents>yes</drawContents>
<!-- Borders are effectively 8 pixels wide regardless of visual appearance -->
<minimumArea>8</minimumArea>
<!--
Set cornerRange to a positive value to increase the size of corner
regions for mouse actions and diagonal window resizing. When omitted,
the default size of the corner region is half of the titlebar height.
<cornerRange>8</cornerRange>
-->
</resize>
<!--
<margin> can be used to reserve space where new/maximized/tiled
windows will not be placed. Clients using layer-shell protocol reserve
space automatically, so <margin> is only intended for other, specialist
cases.
If 'output' is not provided, the margin will be applied to all outputs.
<margin top="10" bottom="10" left="10" right="10" output="HDMI-A-1" />
-->
<!-- Percent based regions based on output usable area, % char is required -->
<regions>
<region name="top-left" x="0%" y="0%" height="50%" width="50%" />
<region name="top" x="0%" y="0%" height="50%" width="100%" />
<region name="top-right" x="50%" y="0%" height="50%" width="50%" />
<region name="left" x="0%" y="0%" height="100%" width="50%" />
<region name="center" x="10%" y="10%" height="80%" width="80%" />
<region name="right" x="50%" y="0%" height="100%" width="50%" />
<region name="bottom-left" x="0%" y="50%" height="50%" width="50%" />
<region name="bottom" x="0%" y="50%" height="50%" width="100%" />
<region name="bottom-right" x="50%" y="50%" height="50%" width="50%" />
</regions>
<!--
Keybind actions are specified in labwc-actions(5)
The following keybind modifiers are supported:
W - window/super/logo
A - alt
C - ctrl
S - shift
Use <keyboard><default /> to load all the default keybinds (those listed
below). If the default keybinds are largely what you want, a sensible
approach could be to start the <keyboard> section with a <default />
element, and then (re-)define any special binds you need such as launching
your favourite terminal or application launcher. See rc.xml for an example.
-->
<keyboard>
<!--
# Numlock is not set by default
<numlock>on|off</numlock>
-->
<layoutScope>global</layoutScope>
<repeatRate>25</repeatRate>
<repeatDelay>600</repeatDelay>
<!-- Keybindings for menus -->
<keybind key="A-F1">
<action name="ShowMenu" menu="root-menu" />
</keybind>
<keybind key="W-Space">
<action name="ShowMenu" menu="root-menu" />
</keybind>
<keybind key="Super_L" onRelease="yes">
<action name="ShowMenu" menu="root-menu" />
</keybind>
<keybind key="A-Space">
<action name="ShowMenu" menu="client-menu" atCursor="no" />
</keybind>
<!-- keybind for client-list-combined-menu - will center in middle of screen -->
<keybind key="W-Tab">
<action name="ShowMenu" menu="client-list-combined-menu" />
<position>
<x>center</x>
<y>center</y>
</position>
</keybind>
<!-- Keybindings for running applications -->
<keybind key="W-Return">
<action name="Execute" command="x-terminal-emulator" />
</keybind>
<keybind key="A-F2">
<action name="Execute" command="gmrun" />
</keybind>
<keybind key="A-F3">
<action name="Execute" command="tofi-drun" />
</keybind>
<keybind key="W-t">
<action name="Execute" command="x-terminal-emulator" />
</keybind>
<keybind key="W-w">
<action name="Execute" command="x-www-browser" />
</keybind>
<keybind key="W-f">
<action name="Execute" command="bl-file-manager" />
</keybind>
<keybind key="W-e">
<action name="Execute" command="bl-text-editor" />
</keybind>
<keybind key="W-m">
<action name="Execute" command="bl-media-player" />
</keybind>
<keybind key="W-l">
<action name="Execute" command="bl-lock" />
</keybind>
<keybind key="Print">
<action name="Execute" command="xfce4-screenshooter" />
</keybind>
<!-- was originally A-Print -->
<keybind key="C-Print">
<action name="Execute">
<command>sh -c 'grim -g "$(slurp)"'</command>
</action>
</keybind>
<keybind key="W-h">
<action name="Execute">
<command>x-terminal-emulator -e "htop"</command>
</action>
</keybind>
<keybind key="W-x">
<action name="Execute" command="bl-exit" />
</keybind>
<keybind key="XF86_AudioLowerVolume">
<action name="Execute" command="pactl set-sink-volume @DEFAULT_SINK@ -5%" />
</keybind>
<keybind key="XF86_AudioRaiseVolume">
<action name="Execute" command="pactl set-sink-volume @DEFAULT_SINK@ +5%" />
</keybind>
<keybind key="XF86_AudioMute">
<action name="Execute" command="pactl set-sink-mute @DEFAULT_SINK@ toggle" />
</keybind>
<keybind key="XF86_MonBrightnessUp">
<action name="Execute" command="brightnessctl set +10%" />
</keybind>
<keybind key="XF86_MonBrightnessDown">
<action name="Execute" command="brightnessctl set 10%-" />
</keybind>
<!-- Keybindings for desktop switching -->
<keybind key="C-A-Left">
<action name="GoToDesktop" to="left" wrap="no" />
</keybind>
<keybind key="C-A-Right">
<action name="GoToDesktop" to="right" wrap="no" />
</keybind>
<keybind key="S-A-Left">
<action name="SendToDesktop" to="left" wrap="yes" />
</keybind>
<keybind key="S-A-Right">
<action name="SendToDesktop" to="right" wrap="yes" />
</keybind>
<keybind key="W-F1">
<action name="GoToDesktop" to="1" />
</keybind>
<keybind key="W-F2">
<action name="GoToDesktop" to="2" />
</keybind>
<!-- "ToggleShowDesktop" will be available in a future labwc release. -->
<keybind key="W-d">
<action name="ToggleShowDesktop" />
</keybind>
<!-- Keybindings for windows -->
<keybind key="A-F4">
<action name="Close" />
</keybind>
<keybind key="A-F5">
<action name="Iconify" />
</keybind>
<keybind key="A-F6">
<action name="ToggleMaximize" direction="both" />
</keybind>
<keybind key="A-Escape">
<action name="Lower" />
<action name="Unfocus" />
</keybind>
<keybind key="A-r">
<action name="resize" />
</keybind>
<keybind key="A-m">
<action name="Move" />
</keybind>
<!-- Keybindings for window switching -->
<keybind key="A-Tab">
<action name="NextWindow" />
</keybind>
<keybind key="A-S-Tab">
<action name="PreviousWindow" />
</keybind>
<!-- A bit of tiling -->
<keybind key="W-Left">
<action name="SnapToEdge" direction="left" combine="yes" />
</keybind>
<keybind key="W-Right">
<action name="SnapToEdge" direction="right" combine="yes" />
</keybind>
<keybind key="W-Up">
<action name="SnapToEdge" direction="up" combine="yes" />
</keybind>
<keybind key="W-Down">
<action name="SnapToEdge" direction="down" combine="yes" />
</keybind>
<!-- SnapToRegion via W-Numpad -->
<keybind key="W-KP_7">
<action name="SnapToRegion" region="top-left" />
</keybind>
<keybind key="W-KP_8">
<action name="SnapToRegion" region="top" />
</keybind>
<keybind key="W-KP_9">
<action name="SnapToRegion" region="top-right" />
</keybind>
<keybind key="W-KP_4">
<action name="SnapToRegion" region="left" />
</keybind>
<keybind key="W-KP_5">
<action name="SnapToRegion" region="center" />
</keybind>
<keybind key="W-KP_6">
<action name="SnapToRegion" region="right" />
</keybind>
<keybind key="W-KP_1">
<action name="SnapToRegion" region="bottom-left" />
</keybind>
<keybind key="W-KP_2">
<action name="SnapToRegion" region="bottom" />
</keybind>
<keybind key="W-KP_3">
<action name="SnapToRegion" region="bottom-right" />
</keybind>
</keyboard>
<!--
Multiple <mousebind> can exist within one <context>
Multiple <actions> can exist within one <mousebind>
Use <mouse><default /> to load all the default mousebinds (those listed
below). If the default mousebinds are largely what you want, a sensible
approach could be to start the <mouse> section with a <default />
element, and then (re-)define any special binds you need such as launching
a custom menu when right-clicking on your desktop. See rc.xml for an
example.
-->
<mouse>
<!-- time is in ms -->
<doubleClickTime>500</doubleClickTime>
<context name="Frame">
<mousebind button="A-Left" action="Press">
<action name="Focus" />
<action name="Raise" />
</mousebind>
<mousebind button="A-Left" action="Click">
<action name="Unshade" />
</mousebind>
<mousebind button="A-Left" action="Drag">
<action name="Move" />
</mousebind>
<mousebind button="A-Right" action="Press">
<action name="Focus" />
<action name="Raise" />
<action name="Unshade" />
</mousebind>
<mousebind button="A-Right" action="Drag">
<action name="Resize" />
</mousebind>
<mousebind button="A-Middle" action="Press">
<action name="Lower" />
<action name="Unfocus" />
</mousebind>
<mousebind button="S-Left" action="Press">
<action name="SendToDesktop" to="left" wrap="yes" />
</mousebind>
<mousebind button="A-Left" action="Press">
<action name="SendToDesktop" to="right" wrap="yes" />
</mousebind>
<mousebind button="W-Left" action="Drag">
<action name="Move" />
</mousebind>
</context>
<!--
<context name="Border">
<mousebind button="Left" action="Press">
<action name="Focus" />
<action name="Raise" />
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize" />
</mousebind>
</context>
-->
<context name="Top">
<mousebind button="Left" action="Drag">
<action name="Resize" />
</mousebind>
</context>
<context name="Left">
<mousebind button="Left" action="Drag">
<action name="Resize" />
</mousebind>
</context>
<context name="Right">
<mousebind button="Left" action="Drag">
<action name="Resize" />
</mousebind>
</context>
<context name="Bottom">
<mousebind button="Left" action="Drag">
<action name="Resize" />
</mousebind>
</context>
<context name="TRCorner">
<mousebind button="Left" action="Drag">
<action name="Resize" />
</mousebind>
</context>
<context name="BRCorner">
<mousebind button="Left" action="Drag">
<action name="Resize" />
</mousebind>
</context>
<context name="TLCorner">
<mousebind button="Left" action="Drag">
<action name="Resize" />
</mousebind>
</context>
<context name="BLCorner">
<mousebind button="Left" action="Drag">
<action name="Resize" />
</mousebind>
</context>
<context name="TitleBar">
<mousebind button="Left" action="Press">
<action name="Focus" />
<action name="Raise" />
</mousebind>
<mousebind button="Right" action="Click">
<action name="Focus" />
<action name="Raise" />
</mousebind>
<mousebind direction="Up" action="Scroll">
<action name="Unshade" />
<action name="Focus" />
</mousebind>
<mousebind direction="Down" action="Scroll">
<action name="Unfocus" />
<action name="Shade" />
</mousebind>
<mousebind button="Left" action="DoubleClick">
<action name="ToggleMaximize" />
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Lower" />
<action name="Unfocus" />
</mousebind>
</context>
<context name="Title">
<mousebind button="Left" action="Drag">
<action name="Move" />
</mousebind>
<mousebind button="Left" action="DoubleClick">
<action name="ToggleMaximize" />
</mousebind>
<mousebind button="Right" action="Click">
<action name="ShowMenu" menu="client-menu" />
</mousebind>
</context>
<context name="Maximize">
<mousebind button="Left" action="Click">
<action name="ToggleMaximize" />
</mousebind>
<mousebind button="Right" action="Click">
<action name="ToggleMaximize" direction="horizontal" />
</mousebind>
<mousebind button="Middle" action="Click">
<action name="ToggleMaximize" direction="vertical" />
</mousebind>
</context>
<context name="WindowMenu">
<mousebind button="Left" action="Click">
<action name="ShowMenu" menu="client-menu" atCursor="no" />
</mousebind>
<mousebind button="Right" action="Click">
<action name="ShowMenu" menu="client-menu" atCursor="no" />
</mousebind>
</context>
<context name="Icon">
<mousebind button="Left" action="Click">
<action name="ShowMenu" menu="client-menu" atCursor="no" />
</mousebind>
<mousebind button="Right" action="Click">
<action name="ShowMenu" menu="client-menu" atCursor="no" />
</mousebind>
</context>
<context name="Shade">
<mousebind button="Left" action="Click">
<action name="ToggleShade" />
</mousebind>
</context>
<context name="AllDesktops">
<mousebind button="Left" action="Click">
<action name="ToggleOmnipresent" />
</mousebind>
</context>
<context name="Iconify">
<mousebind button="Left" action="Click">
<action name="Iconify" />
</mousebind>
</context>
<context name="Close">
<mousebind button="Left" action="Click">
<action name="Close" />
</mousebind>
</context>
<context name="Client">
<mousebind button="Left" action="Press">
<action name="Focus" />
<action name="Raise" />
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Focus" />
<action name="Raise" />
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus" />
<action name="Raise" />
</mousebind>
</context>
<context name="Desktop">
<mousebind button="Left" action="Press">
<action name="ShowMenu" menu="none" />
</mousebind>
<mousebind button="Right" action="Press">
<action name="ShowMenu" menu="root-menu" />
</mousebind>
<mousebind button="Middle" action="Press">
<!-- <action name="ShowMenu" menu="root-menu" /> -->
<!-- openbox default, swap with above line to activate -->
<action name="ShowMenu" menu="client-list-combined-menu" />
</mousebind>
<mousebind direction="Up" action="Scroll">
<action name="GoToDesktop" to="left" wrap="yes" />
</mousebind>
<mousebind direction="Down" action="Scroll">
<action name="GoToDesktop" to="right" wrap="yes" />
</mousebind>
</context>
</mouse>
<!--
A touch configuration can be bound to a specific device. If device
name is left empty, the touch configuration applies to all touch
devices or functions as a fallback. Multiple touch configurations
can exist.
See the libinput device section for obtaining the device names.
Direct cursor movement to a specified output. If the compositor is
running in nested mode, this does not take effect.
If mouseEmulation is enabled, all touch up/down/motion events are
translated to mouse button and motion events.
-->
<touch>
<!-- <deviceName>ELAN2514:00 04F3:2AF1<deviceName> -->
<!-- <mapToOutput>HDMI-A-1</mapToOutput> -->
<mouseEmulation>no</mouseEmulation>
</touch>
<!--
The tablet cursor movement can be restricted to a single output.
If output is left empty or the output does not exists, the tablet
will span all outputs.
The tablet orientation can be changed in 90 degree steps, thus
*rotate* can be set to [0|90|180|270]. Rotation will be applied
after applying tablet area transformation.
The active tablet area can be specified by setting the *top*/*left*
coordinate (in mm) and/or *width*/*height* (in mm). If width or
height are omitted or default (0.0), width/height will be set to
the remaining width/height seen from top/left.
The tablet can be forced to always use mouse emulation. This prevents
tablet specific restrictions, e.g. no support for drag&drop, but also
omits tablet specific features like reporting pen pressure.
Pen buttons emulate regular mouse buttons. The pen *button* can be any
of [Stylus|Stylus2|Stylus3] and can be mapped to mouse buttons
[Right|Middle|Side]. Tablet pad buttons [Pad|Pad2|Pad3|..|Pad9] also
emulate regular mouse buttons and can be mapped to any mouse button.
When using mouse emulation, the pen tip [tip] and the stylus buttons
can be set to any available mouse button [Left|Right|Middle|..|Task].
-->
<tablet rotate="0" mouseEmulation="no">
<!-- <mapToOutput>HDMI-A-1</mapToOutput> -->
<!-- Active area dimensions are in mm -->
<area top="0.0" left="0.0" width="0.0" height="0.0" />
<map button="Tip" to="Left" />
<map button="Stylus" to="Right" />
<map button="Stylus2" to="Middle" />
</tablet>
<!--
All tablet tools, except of type mouse and lens, use absolute
positioning by default. The *motion* attribute allows to set tools
to relative motion instead. When using relative motion,
*relativeMotionSensitivity* controls the speed of the cursor. Using
a value lower than 1.0 decreases the speed, using a value greater than
1.0 increases the speed of the cursor.
The pressure range of a tablet tool can be controlled by adjusting
*minPressure* and *maxPressure*.
-->
<tabletTool motion="absolute" relativeMotionSensitivity="1.0"
minPressure="0.0" maxPressure="1.0" />
<!--
The *category* attribute is optional and can be set to touch, touchpad,
non-touch, default or the name of a device. You can obtain device names by
running *libinput list-devices* as root or member of the input group.
Tap is set to *yes* by default. All others are left blank in order to use
device defaults.
All values are [yes|no] except for:
- pointerSpeed [-1.0 to 1.0]
- accelProfile [flat|adaptive]
- tapButtonMap [lrm|lmr]
- clickMethod [none|buttonAreas|clickfinger]
- sendEventsMode [yes|no|disabledOnExternalMouse]
- calibrationMatrix [six float values split by space]
- scrollFactor [float]
The following <libinput>...</libinput> block may not be complete for
your requirements. Default values are device specific. Only set an option
if you require to override the default. Valid values must be inserted.
-->
<libinput>
<device category="default">
<!-- <naturalScroll>no</naturalScroll> -->
<!-- <leftHanded>no</leftHanded> -->
<!-- <pointerSpeed>0.0</pointerSpeed> -->
<!-- <accelProfile>adaptive</accelProfile> -->
<tap>yes</tap>
<!-- <tapButtonMap>lrm</tapButtonMap> -->
<!-- <tapAndDrag>yes</tapAndDrag> -->
<!-- <dragLock>yes</dragLock> -->
<!-- <threeFingerDrag>yes</threeFingerDrag> -->
<!-- <middleEmulation>no</middleEmulation> -->
<!-- <disableWhileTyping>yes</disableWhileTyping> -->
<!-- <clickMethod>buttonAreas</clickMethod> -->
<!-- <scrollMethod>twofinger</scrollMethod> -->
<!-- <scrollButton>274</scrollButton> -->
<!-- <sendEventsMode>yes</sendEventsMode> -->
<!-- <calibrationMatrix>1 0 0 0 1 0</calibrationMatrix> -->
<scrollFactor>2.0</scrollFactor>
</device>
</libinput>
<!--
# Window Rules
# - Criteria can consist of 'identifier', 'title', 'sandboxEngine' or
# 'sandboxAppId'. AND logic is used when multiple options are specified.
# - 'identifier' relates to app_id for native Wayland windows and
# WM_CLASS for XWayland clients.
# - Criteria can also contain `matchOnce="true"` meaning that the rule
# must only apply to the first instance of the window with that
# particular 'identifier' or 'title'.
# - Matching is case-insensitive and is performed using shell wildcard
# patterns (see glob(7)) so '\*' (not between brackets) matches any string
# and '?' matches any single character.
<windowRules>
<windowRule identifier="*"><action name="Maximize" /></windowRule>
<windowRule identifier="foo" serverDecoration="yes" />
<windowRule title="bar" serverDecoration="yes" />
<windowRule identifier="baz" title="quax" serverDecoration="yes" />
</windowRules>
# Example below for `lxqt-panel` and `pcmanfm-qt \-\-desktop`
# where 'matchOnce' is used to avoid applying rule to the panel
# configuration window with the same 'app_id'.
<windowRules>
<windowRule identifier="lxqt-panel" matchOnce="true">
<skipTaskbar>yes</skipTaskbar>
<action name="MoveTo" x="0" y="0" />
<action name="ToggleAlwaysOnTop" />
</windowRule>
<windowRule title="pcmanfm-desktop*">
<skipTaskbar>yes</skipTaskbar>
<skipWindowSwitcher>yes</skipWindowSwitcher>
<fixedPosition>yes</fixedPosition>
<action name="MoveTo" x="0" y="0" />
<action name="ToggleAlwaysOnBottom" />
</windowRule>
<windowRule identifier="org.qutebrowser.qutebrowser">
<action name="ResizeTo" width="1024" height="800" />
<action name="AutoPlace" />
</windowRule>
</windowRules>
-->
<windowRules>
<windowRule identifier="dialog-*" matchOnce="false">
<action name="MoveTo" x="760" y="490" />
<action name="ResizeTo" width="400" height="100" />
</windowRule>
<windowRule identifier="preferences-*" matchOnce="false">
<action name="MoveTo" x="685" y="353" />
<action name="ResizeTo" width="550" height="375" />
</windowRule>
<windowRule identifier="xwwall*" matchOnce="false">
<action name="AutoPlace" policy="center" />
</windowRule>
<windowRule identifier="gtk-preferences*" matchOnce="false">
<action name="AutoPlace" policy="center" />
</windowRule>
<windowrule identifier="gmrun" matchOnce="false" serverDecoration="no">
<action name="AutoPlace" policy="center" />
</windowrule>
<windowrule identifier="system-log-out" matchOnce="false" serverDecoration="no">
<action name="AutoPlace" policy="center" />
</windowrule>
</windowRules>
<menu>
<ignoreButtonReleasePeriod>250</ignoreButtonReleasePeriod>
<showIcons>yes</showIcons>
</menu>
<!--
Magnifier settings
'width' sets the width in pixels of the magnifier window.
'height' sets the height in pixels of the magnifier window.
'initScale' sets the initial magnification factor at boot.
'increment' sets the amount by which the magnification factor
changes when 'ZoomIn' or 'ZoomOut' are called.
'useFilter' sets whether to use a bilinear filter on the magnified
output or simply to take nearest pixel.
-->
<magnifier>
<width>400</width>
<height>400</height>
<initScale>2.0</initScale>
<increment>0.2</increment>
<useFilter>true</useFilter>
</magnifier>
</labwc_config>...elevator in the Brain Hotel, broken down but just as well...
( a boring Japan blog (currently paused), now on Bluesky, there's also some GitStuff )
Offline