Here is a solution that will only work on Xorg, not Wayland.
We will modify the binary file, /usr/lib/gnome-shell/libgnome-shell.so
.
Make a backup of the original file.
sudo cp /usr/lib/gnome-shell/libgnome-shell.so /usr/lib/gnome-shell/libgnome-shell.so.original
View the portion of the file that we will modify.
xxd /usr/lib/gnome-shell/libgnome-shell.so | grep -A3 "ribou.DisplayA"
The output will look like this, showing that Caribou uses Gnome Shell's new LocalAdapter
to handle virtual key presses.
001150d0: 4361 7269 626f 752e 4469 7370 6c61 7941 Caribou.DisplayA
001150e0: 6461 7074 6572 2e73 6574 5f64 6566 6175 dapter.set_defau
001150f0: 6c74 286e 6577 204c 6f63 616c 4164 6170 lt(new LocalAdap
00115100: 7465 7228 2929 3b0a 0a20 2020 2020 2020 ter());..
Comment out the part of the code that tells Caribou to use Gnome Shell's LocalAdapter
. Caribou will then default to its own XAdapter
, which works only in X11.
sudo sed -i 's|\x43\x61\x72\x69\x62\x6f\x75\x2e\x44\x69\x73\x70\x6c\x61\x79\x41|\x2f\x2f\x72\x69\x62\x6f\x75\x2e\x44\x69\x73\x70\x6c\x61\x79\x41|g' /usr/lib/gnome-shell/libgnome-shell.so
Verify that /usr/lib/gnome-shell/libgnome-shell.so
was modified correctly.
xxd /usr/lib/gnome-shell/libgnome-shell.so | grep -A3 "ribou.DisplayA"
The output will look like this, showing that the line has now been commented out.
001150d0: 2f2f 7269 626f 752e 4469 7370 6c61 7941 //ribou.DisplayA
001150e0: 6461 7074 6572 2e73 6574 5f64 6566 6175 dapter.set_defau
001150f0: 6c74 286e 6577 204c 6f63 616c 4164 6170 lt(new LocalAdap
00115100: 7465 7228 2929 3b0a 0a20 2020 2020 2020 ter());..
Disable Wayland and use X11 on the GDM (login) screen.
sudo sed -i "s|#WaylandEnable=false|WaylandEnable=false|g" /etc/gdm3/custom.conf
Make sure WaylandEnable
has been uncommented and that it is set to false
in the GDM configuration.
cat /etc/gdm3/custom.conf | grep -B1 WaylandEnable
The output should look exactly like this.
# Uncoment the line below to force the login screen to use Xorg
WaylandEnable=false
Finally, reboot to make the changes effective.
Since the solution above is only a workaround, register on Launchpad and Bugzilla, and mark yourself as impacted, so this bug gets fixed...
Undo / Revert Changes
If your outputs from steps 4 and 5 match what is shown above, then the changes were made successfully. If you need to revert these changes, do the following:
To un-do the changes in step 4...
sudo cp /usr/lib/gnome-shell/libgnome-shell.so.original /usr/lib/gnome-shell/libgnome-shell.so
To un-do the changes in step 5...
sudo sed -i "s|WaylandEnable=false|#WaylandEnable=false|g" /etc/gdm3/custom.conf
onboard
on screen keyboard: Install it and start it: Does it work better?sudo apt install onboard
– sudodus Dec 06 '17 at 06:06