Skip to main content
Version: 2.1 (dev)

Wayland vs X11

X11Wayland
window managementclients set hints, the WM interprets themthe compositor decides everything
drawingserver-side or client-sideclient-side only; the compositor composes buffers
inputany client can see or inject itper surface; only the compositor injects
screenshotsany app can grab the screencompositor support required
tray icons_NET_SYSTEMTRAY embeds windowsStatusNotifierItem over D-Bus

What changes in SomeWM​

  • Restart. The compositor is the display server, so it cannot exec itself without dropping every client. awesome.restart() rebuilds the Lua state in process instead; Mod4+Ctrl+r in the default config calls it.
  • Systray. Icons come over StatusNotifierItem. NetworkManager, Bluetooth applets, Discord and Steam work; XEmbed-only apps show nothing.
  • Input injection. xdotool cannot reach other apps. root.fake_input() works because the compositor itself injects through wlr_seat.
  • Key repeat. The compositor sends the repeat rate and delay with the keymap, and each application repeats on its own, asking the keymap whether the held key repeats. keyboard_repeat_rate and keyboard_repeat_delay set the timing; a layout can mark a key non-repeating and no property overrides it (troubleshooting).
  • X properties. Wayland has no shared X11 property store. The compatibility reference distinguishes absent global calls from client-local storage.
  • Borders. The border is a scene rect around the client geometry. c:geometry() excludes it, as in AwesomeWM; titlebars sit inside the geometry and start inside the border.
  • XKB toggle options. grp:alt_shift_toggle and the other grp:* options need an X server to act on the key. On any Wayland compositor they do nothing. Bind the switch yourself (Keyboard Layout Switching):
awful.key({ "Mod1", "Shift" }, "space", function()
local current = awesome.xkb_get_layout_group()
awesome.xkb_set_layout_group((current + 1) % 2)
end)

Static options such as ctrl:nocaps and compose:ralt work as on X11.

AwesomeWM Compatibility has the compatibility contract; Tag Persistence covers hotplug, which Wayland makes routine.