This commit is contained in:
legop3
2026-07-17 00:06:55 -04:00
parent e97d4056fa
commit 10f71edaf1
2 changed files with 263 additions and 63 deletions
+23 -8
View File
@@ -16,6 +16,8 @@ MULTIROVER_SERVICE="/etc/systemd/system/multirover.service"
SNAPSHOT_DIR="/var/lib/rover-snapshots"
REPLAY_SEGMENT_DIR="/var/lib/replay-segments"
KINECT_UDEV_RULE="/etc/udev/rules.d/99-kinect-world.rules"
BLUETOOTH_OVERRIDE_DIR="/etc/systemd/system/bluetooth.service.d"
BLUETOOTH_OVERRIDE="$BLUETOOTH_OVERRIDE_DIR/20-multirover-balance-board.conf"
if [[ $EUID -ne 0 ]]; then
echo "This installer must be run with sudo/root." >&2
@@ -180,9 +182,10 @@ if [[ -f "$BALANCE_BOARD_NATIVE_DIR/Makefile" ]]; then
exit 1
fi
# Only this small audited bridge needs the management socket used for the
# board's raw six-byte pairing PIN. Never grant CAP_NET_ADMIN to node or the
# full multirover service executable.
setcap cap_net_admin+ep "$BALANCE_BOARD_WORKER"
# board's raw six-byte pairing PIN and the reserved HID interrupt PSM used by
# front-button reconnects. Never grant either capability to node or the full
# multirover service executable.
setcap cap_net_admin,cap_net_bind_service+ep "$BALANCE_BOARD_WORKER"
fi
if [[ ! -f "$CONFIG_PATH" ]]; then
@@ -191,10 +194,22 @@ if [[ ! -f "$CONFIG_PATH" ]]; then
echo "Copied config.example.yaml to config.yaml; edit it before exposing the service."
fi
# Bluetoothd is still responsible for discovery and the one-time bond. Wiiuse
# owns the live HID channels, so no kernel HID modules, input.conf edits, or
# broad /dev/input permission rule are involved in the runtime data path.
systemctl enable --now bluetooth.service
# Bluetoothd remains responsible for discovery and the one-time bond, but its
# generic input plugin otherwise reserves PSM 0x13 before the Balance Board
# worker can listen for the board's front-button reconnect. This dedicated rover
# server gives that one HID listener to the worker; every other BlueZ profile is
# left enabled. Clearing ExecStart is required by systemd before replacing the
# vendor unit's command in a drop-in.
install -d -m 0755 "$BLUETOOTH_OVERRIDE_DIR"
cat > "$BLUETOOTH_OVERRIDE" <<'EOF'
[Service]
ExecStart=
ExecStart=/usr/libexec/bluetooth/bluetoothd --noplugin=input
EOF
chmod 0644 "$BLUETOOTH_OVERRIDE"
systemctl daemon-reload
systemctl enable bluetooth.service
systemctl restart bluetooth.service
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
@@ -328,5 +343,5 @@ echo
echo "Update $CONFIG_PATH to set admins, lockdown settings, and media parameters."
echo "Kinect/libfreenect packages and udev permissions were installed."
echo "If a Kinect is already plugged in, unplug/replug its USB/power before testing so the new udev rule applies."
echo "Wii Balance Board Bluetooth support, kernel driver, bridge, and restricted input rule were installed."
echo "Wii Balance Board direct Bluetooth bridge and front-button listener were installed."
echo "Enable balanceBoard in config.yaml, press red Sync once, then use the front button for later wakes."