diff --git a/debian/librem5-base-defaults.alternatives b/debian/librem5-base-defaults.alternatives
new file mode 100644
index 0000000000000000000000000000000000000000..ebf7e263078f51aecdbbbf7c4126eb105bc7a255
--- /dev/null
+++ b/debian/librem5-base-defaults.alternatives
@@ -0,0 +1,4 @@
+Name: Phosh-OSK
+Link: /usr/share/applications/sm.puri.OSK0.desktop
+Alternative: /usr/share/applications/sm.puri.OSK0-legacy.desktop
+Priority: 20
diff --git a/debian/librem5-base-defaults.install b/debian/librem5-base-defaults.install
index 2442a743714482c7290375669cbec1ed9932b4d7..ac3c418d7fa7b073b116f30437826adfed2586fe 100644
--- a/debian/librem5-base-defaults.install
+++ b/debian/librem5-base-defaults.install
@@ -9,6 +9,9 @@ default/audio/paths                  usr/share/pulseaudio/alsa-mixer/
 default/audio/ucm2                   usr/share/alsa/
 default/audio/alsa-restore.service.d lib/systemd/system/
 
+default/sm.puri.OSK0-legacy.desktop         usr/share/applications/
+default/osk-wayland                  usr/bin/
+
 # librem5 specific environment variables
 default/profile.d/*.sh etc/profile.d/
 
diff --git a/default/osk-wayland b/default/osk-wayland
new file mode 100755
index 0000000000000000000000000000000000000000..bf08479a4628d1e15dac04ae59cfd726bec107ad
--- /dev/null
+++ b/default/osk-wayland
@@ -0,0 +1,9 @@
+#!/bin/sh
+set -e
+OSK=/usr/bin/virtboard
+
+if [ -x /usr/bin/squeekboard ]; then
+  OSK=/usr/bin/squeekboard
+fi
+exec $OSK
+
diff --git a/default/sm.puri.OSK0-legacy.desktop b/default/sm.puri.OSK0-legacy.desktop
new file mode 100644
index 0000000000000000000000000000000000000000..1847c844dc6618736b61a15fcd5075a4d53a0dd9
--- /dev/null
+++ b/default/sm.puri.OSK0-legacy.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Type=Application
+Name=On-screen keyboard
+Comment=Legacy on-screen keyboard wrapper
+Exec=/usr/bin/osk-wayland
+Categories=GNOME;Core;
+OnlyShowIn=GNOME;
+NoDisplay=true
+X-GNOME-Autostart-Phase=Panel
+X-GNOME-Provides=inputmethod
+X-GNOME-Autostart-Notify=true
+X-GNOME-AutoRestart=true