If you’re using a Phosh-based distro that runs SystemD such as Mobian follow the guide here.
If you’re using a distro running OpenRC such as PostmarketOS Phosh follow the guide below:
As OpenRC can only run commands as root it was quite a challenge getting the environment variables right so gsettings
could be run as the user but I got it figured out.
Guide: Pinephone PostmarketOS w/ Phosh: Automatically disable the soft keyboard when the pine64 keyboard shell is attached and visa versa
Create the script:
touch /usr/local/bin/soft-kbd-override
chmod +x /usr/local/bin/soft-kbd-override
vi /usr/local/bin/soft-kbd-override
# Paste the following and save:
#!/bin/sh
# Check interval is either the first parameter or every 10 seconds
check_interval=${1:-10}
# Specify user to run under
target_user='user'
# Attempt to get gnome-session pid till successful (phone startup)
while ! PID=$( pgrep gnome-session ); do
sleep 3
done
export DBUS_SESSION_BUS_ADDRESS=$( xargs -0 -n 1 -a /proc/$PID/environ | grep '^DBUS_SESSION_BUS_ADDRESS=' | cut -d = -f2- )
sleep 5
prev_state=
while true; do
cat /sys/class/power_supply/ip5xxx-battery/voltage_now 2>&1 >/dev/null && state='false' || state='true'
if [ "$state" != "$prev_state" ]; then
sudo \
--user "$target_user" \
--set-home \
--preserve-env \
gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled "$state" \
&& prev_state=$state
fi
sleep "$check_interval"
done
# Test the script: (Ctrl+C to quit)
soft-kbd-override
Create the service to run the script:
vi /etc/init.d/soft-kbd-override
# Paste the following and save:
#!/sbin/openrc-run
name='Soft Keyboard Override'
description='Turns off the soft keyboard if a pine64 keyboard shell is detected'
command='/usr/local/bin/soft-kbd-override'
command_background='yes'
pidfile='/run/'$RC_SVCNAME'.pid'
# Run soft-kbd-override, there should be no errors or hanging
rc-service soft-kbd-override start
# Enable soft-kbd-override at startup at the default runlevel
rc-update add soft-kbd-override