alols / xcape

Linux utility to configure modifier keys to act as other keys when pressed and released on their own.
GNU General Public License v3.0
2.1k stars 117 forks source link

Stopped working very recently; perhaps due to a recent package update? [GNOME/Wayland related] #80

Closed nogweii closed 7 years ago

nogweii commented 7 years ago

Running 1.2 as well as the latest git version. xcape seems to not be generating the events any more for me. Turning on debug mode, I don't see it detecting the keypress events. I have recently updated my Arch Linux system. Here is what the package compiles against:

~/tmp/aur/xcape-git> ldd =xcape
    linux-vdso.so.1 (0x00007fff99cfd000)
    libXtst.so.6 => /usr/lib/libXtst.so.6 (0x00007fd33926c000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x00007fd338f2d000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fd338d10000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007fd338972000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0x00007fd338760000)
    libXi.so.6 => /usr/lib/libXi.so.6 (0x00007fd33854f000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007fd338326000)
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fd338122000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fd339472000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x00007fd337f1e000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007fd337d18000)

Which those libraries are from these packages:

~/tmp/aur/xcape-git> pacman -Qo =xcape $(ldd =xcape | sed -n '/=>/s@.*=> \(.*\) (.*@\1@ p')
/usr/bin/xcape is owned by xcape-git 1:1.2.r5.g6331193-1
/usr/lib/libXtst.so.6 is owned by libxtst 1.2.3-1
/usr/lib/libX11.so.6 is owned by libx11 1.6.4-1
/usr/lib/libpthread.so.0 is owned by glibc 2.24-2
/usr/lib/libc.so.6 is owned by glibc 2.24-2
/usr/lib/libXext.so.6 is owned by libxext 1.3.3-1
/usr/lib/libXi.so.6 is owned by libxi 1.7.8-1
/usr/lib/libxcb.so.1 is owned by libxcb 1.12-1
/usr/lib/libdl.so.2 is owned by glibc 2.24-2
/usr/lib/libXau.so.6 is owned by libxau 1.0.8-2
/usr/lib/libXdmcp.so.6 is owned by libxdmcp 1.1.2-1
nogweii commented 7 years ago

Hm, a bit further testing shows that it works everywhere but in GNOME's Terminal. xev, firefox both work as expected.

Gnome Terminal 3.22.1 is compiled against these libraries (latest version according to -Syu):

~/tmp/aur/xcape-git> pacman -Qo =gnome-terminal $(ldd =gnome-terminal | sed -n '/=>/s@.*=> \(.*\) (.*@\1@ p')
/usr/bin/gnome-terminal is owned by gnome-terminal 3.22.1-1
/usr/lib/libvte-2.91.so.0 is owned by vte3 0.46.1-1
/usr/lib/libgtk-3.so.0 is owned by gtk3 3.22.5-1
/usr/lib/libgdk-3.so.0 is owned by gtk3 3.22.5-1
/usr/lib/libdconf.so.1 is owned by dconf 0.26.0-2
/usr/lib/libgio-2.0.so.0 is owned by glib2 2.50.2-1
/usr/lib/libgobject-2.0.so.0 is owned by glib2 2.50.2-1
/usr/lib/libglib-2.0.so.0 is owned by glib2 2.50.2-1
/usr/lib/libuuid.so.1 is owned by libutil-linux 2.28.2-2
/usr/lib/libX11.so.6 is owned by libx11 1.6.4-1
/usr/lib/libpthread.so.0 is owned by glibc 2.24-2
/usr/lib/libc.so.6 is owned by glibc 2.24-2
/usr/lib/libpangocairo-1.0.so.0 is owned by pango 1.40.3-1
/usr/lib/libpango-1.0.so.0 is owned by pango 1.40.3-1
/usr/lib/libatk-1.0.so.0 is owned by atk 2.22+1+gd57f97d-1
/usr/lib/libcairo.so.2 is owned by cairo-infinality-ultimate 1.14.6-2
/usr/lib/libz.so.1 is owned by zlib 1:1.2.8-7
/usr/lib/libpcre2-8.so.0 is owned by pcre2 10.22-2
/usr/lib/libgnutls.so.30 is owned by gnutls 3.4.17-1
/usr/lib/libstdc++.so.6 is owned by gcc-libs-multilib 6.2.1-1
/usr/lib/libm.so.6 is owned by glibc 2.24-2
/usr/lib/libgmodule-2.0.so.0 is owned by glib2 2.50.2-1
/usr/lib/libXi.so.6 is owned by libxi 1.7.8-1
/usr/lib/libXfixes.so.3 is owned by libxfixes 5.0.3-1
/usr/lib/libcairo-gobject.so.2 is owned by cairo-infinality-ultimate 1.14.6-2
/usr/lib/libgdk_pixbuf-2.0.so.0 is owned by gdk-pixbuf2 2.36.1+31+gecea71eb6-1
/usr/lib/libatk-bridge-2.0.so.0 is owned by at-spi2-atk 2.22.0-1
/usr/lib/libepoxy.so.0 is owned by libepoxy 1.3.1-1
/usr/lib/libpangoft2-1.0.so.0 is owned by pango 1.40.3-1
/usr/lib/libfontconfig.so.1 is owned by fontconfig-infinality-ultimate 2.11.95-4
/usr/lib/libXinerama.so.1 is owned by libxinerama 1.1.3-2
/usr/lib/libXrandr.so.2 is owned by libxrandr 1.5.1-1
/usr/lib/libXcursor.so.1 is owned by libxcursor 1.1.14-2
/usr/lib/libXcomposite.so.1 is owned by libxcomposite 0.4.4-2
/usr/lib/libXdamage.so.1 is owned by libxdamage 1.1.4-2
/usr/lib/libxkbcommon.so.0 is owned by libxkbcommon 0.7.0-1
/usr/lib/libwayland-cursor.so.0 is owned by wayland 1.12.0-1
/usr/lib/libwayland-egl.so.1 is owned by mesa 13.0.2-2
/usr/lib/libwayland-client.so.0 is owned by wayland 1.12.0-1
/usr/lib/libXext.so.6 is owned by libxext 1.3.3-1
/usr/lib/librt.so.1 is owned by glibc 2.24-2
/usr/lib/libresolv.so.2 is owned by glibc 2.24-2
/usr/lib/libmount.so.1 is owned by libutil-linux 2.28.2-2
/usr/lib/libffi.so.6 is owned by libffi 3.2.1-2
/usr/lib/libpcre.so.1 is owned by pcre 8.39-2
/usr/lib/libxcb.so.1 is owned by libxcb 1.12-1
/usr/lib/libdl.so.2 is owned by glibc 2.24-2
/usr/lib/libfreetype.so.6 is owned by freetype2-infinality-ultimate 2.6.3-4
/usr/lib/libthai.so.0 is owned by libthai 0.1.25-1
/usr/lib/libpixman-1.so.0 is owned by pixman 0.34.0-1
/usr/lib/libEGL.so.1 is owned by mesa-libgl 13.0.2-2
/usr/lib/libpng16.so.16 is owned by libpng 1.6.26-2
/usr/lib/libxcb-shm.so.0 is owned by libxcb 1.12-1
/usr/lib/libxcb-render.so.0 is owned by libxcb 1.12-1
/usr/lib/libXrender.so.1 is owned by libxrender 0.9.10-1
/usr/lib/libGL.so.1 is owned by mesa-libgl 13.0.2-2
/usr/lib/libp11-kit.so.0 is owned by p11-kit 0.23.2-1
/usr/lib/libtasn1.so.6 is owned by libtasn1 4.9-2
/usr/lib/libnettle.so.6 is owned by nettle 3.3-1
/usr/lib/libhogweed.so.4 is owned by nettle 3.3-1
/usr/lib/libgmp.so.10 is owned by gmp 6.1.1-1
/usr/lib/libgcc_s.so.1 is owned by gcc-libs-multilib 6.2.1-1
/usr/lib/libatspi.so.0 is owned by at-spi2-core 2.22.0-1
/usr/lib/libdbus-1.so.3 is owned by dbus 1.10.14-1
/usr/lib/libharfbuzz.so.0 is owned by harfbuzz 1.3.4-1
/usr/lib/libexpat.so.1 is owned by expat 2.2.0-2
/usr/lib/libblkid.so.1 is owned by libutil-linux 2.28.2-2
/usr/lib/libXau.so.6 is owned by libxau 1.0.8-2
/usr/lib/libXdmcp.so.6 is owned by libxdmcp 1.1.2-1
/usr/lib/libbz2.so.1.0 is owned by bzip2 1.0.6-5
/usr/lib/libdatrie.so.1 is owned by libdatrie 0.2.10-1
/usr/lib/libX11-xcb.so.1 is owned by libx11 1.6.4-1
/usr/lib/libxcb-dri2.so.0 is owned by libxcb 1.12-1
/usr/lib/libxcb-xfixes.so.0 is owned by libxcb 1.12-1
/usr/lib/libxcb-dri3.so.0 is owned by libxcb 1.12-1
/usr/lib/libxcb-present.so.0 is owned by libxcb 1.12-1
/usr/lib/libxcb-sync.so.1 is owned by libxcb 1.12-1
/usr/lib/libxshmfence.so.1 is owned by libxshmfence 1.2-1
/usr/lib/libgbm.so.1 is owned by mesa 13.0.2-2
/usr/lib/libwayland-server.so.0 is owned by wayland 1.12.0-1
/usr/lib/libdrm.so.2 is owned by libdrm 2.4.74-1
/usr/lib/libglapi.so.0 is owned by mesa 13.0.2-2
/usr/lib/libxcb-glx.so.0 is owned by libxcb 1.12-1
/usr/lib/libXxf86vm.so.1 is owned by libxxf86vm 1.1.4-1
/usr/lib/libsystemd.so.0 is owned by libsystemd 232-6
/usr/lib/libgraphite2.so.3 is owned by graphite 1:1.3.9-1
/usr/lib/libcap.so.2 is owned by libcap 2.25-1
/usr/lib/liblzma.so.5 is owned by xz 5.2.2-2
/usr/lib/liblz4.so.1 is owned by lz4 1:1.7.4.2-1
/usr/lib/libgcrypt.so.20 is owned by libgcrypt 1.7.5-1
/usr/lib/libgpg-error.so.0 is owned by libgpg-error 1.25-1
nogweii commented 7 years ago

OH! This is due to missing wayland support (#67) Precisely, what is going on is the update from GNOME 3.20 to 3.22 broke xcape and GNOME apps. With GNOME 3.22, released this past september, Wayland support was enabled for an even broader class of users. GDM will start a Wayland session when before it would have launched Xorg. X apps still work because it will also launch Xwayland. Firefox isn't compatible with wayland, though it uses GTK, so that's why xcape still worked. xterm is, well, not, and works as well. Anything that used the X11 protocol works with xcape, but anything that speaks native Wayland protocol will not, due to xcape not intercepting the keys at that level. A metaphorical tree looks a bit like this:

wayland
├── Xwayland     <-- xcape hooks at this level
│   ├── firefox
│   ├── xterm
└── gnome-terminal

Apologies for the noise if anyone is watching this, but hopefully it will help a wayward person looking for answers.