Ubuntu26.04が動作している環境に、リモートデスクトップで接続したあと、直接そのPCを操作するとタッチパッドが動かなくなることがあります。キーボードやUSBマウスは問題ない場合、リモートデスクトップセッションが終了後、タッチパッドドライバー(i2c_hid_acpi)が正しくリリースされていないことが原因の可能性があります。

そこで修正スクリプトを作ってみました。環境依存が大きいので直らないかもしれませんが。
実行するスクリプトがやることは次の通りです。
/proc/bus/input/devicesからタッチパッドデバイスを検出- sysfs経由でi2c HIDデバイスを特定
- ドライバーの unbind → rebind を実行(デフォルト)
– または --module オプションでカーネルモジュール再読み込み
- GNOME環境の場合は
gsettingsでタッチパッド有効化
ホストで実行
mkdir -p /opt/lxd-data/script/
cd /opt/lxd-data/script/
sudo nano fix-touchpad1.sh
sudo bash /opt/lxd-data/script/fix-touchpad1.sh
#!/bin/bash
# fix-touchpad1.sh - Fix touchpad after remote desktop session
# Usage: sudo bash fix-touchpad1.sh [--module]
set -euo pipefail
if [[ $EUID -ne 0 ]]; then
echo "Error: This script must be run as root (use sudo)" >&2
exit 1
fi
USE_MODULE=false
if [[ "${1:-}" == "--module" ]]; then
USE_MODULE=true
fi
echo "=== Touchpad Reset Script ==="
echo ""
# Find touchpad device from /proc/bus/input/devices
TOUCHPAD_NAME=$(cat /proc/bus/input/devices | awk '
/^N: Name=.*[Tt]ouchpad/ { gsub(/^N: Name="/, ""); gsub(/"$/, ""); print; exit }
')
if [[ -z "$TOUCHPAD_NAME" ]]; then
echo "Error: No touchpad device found" >&2
exit 1
fi
TOUCHPAD_SYSFS=$(cat /proc/bus/input/devices | awk '
/^N: Name=.*[Tt]ouchpad/ { found=1; next }
found && /^S: Sysfs=/ { gsub(/^S: Sysfs=/, ""); print; exit }
found && /^$/ { found=0 }
')
if [[ -z "$TOUCHPAD_SYSFS" ]]; then
echo "Error: Could not find touchpad sysfs path" >&2
exit 1
fi
echo "Touchpad: $TOUCHPAD_NAME"
echo "Sysfs: $TOUCHPAD_SYSFS"
# Find the i2c HID device name
I2C_DEVICE=""
for dev in /sys/bus/i2c/devices/i2c-*/; do
devname=$(basename "$dev")
if [[ "$TOUCHPAD_SYSFS" == "$dev"* ]]; then
I2C_DEVICE="$devname"
break
fi
done
if [[ -z "$I2C_DEVICE" ]]; then
echo "Error: Could not find i2c device for touchpad" >&2
exit 1
fi
echo "i2c device: $I2C_DEVICE"
# Find driver name
DRIVER_LINK="/sys/bus/i2c/devices/$I2C_DEVICE/driver"
if [[ ! -L "$DRIVER_LINK" ]]; then
echo "Error: No driver bound to $I2C_DEVICE" >&2
exit 1
fi
DRIVER_NAME=$(basename "$(readlink "$DRIVER_LINK")")
echo "Driver: $DRIVER_NAME"
echo ""
if [[ "$USE_MODULE" == true ]]; then
# Method 2: Reload kernel module
echo "Reloading kernel module: $DRIVER_NAME"
modprobe -r "$DRIVER_NAME" 2>/dev/null || true
sleep 1
modprobe "$DRIVER_NAME" 2>/dev/null || true
sleep 1
else
# Method 1: Unbind/rebind driver (default)
DRIVER_DIR="/sys/bus/i2c/drivers/$DRIVER_NAME"
if [[ ! -d "$DRIVER_DIR" ]]; then
echo "Error: Driver directory $DRIVER_DIR not found" >&2
echo "Try: sudo bash $0 --module" >&2
exit 1
fi
echo "Unbinding driver..."
echo "$I2C_DEVICE" > "$DRIVER_DIR/unbind" 2>/dev/null || true
sleep 1
echo "Rebinding driver..."
echo "$I2C_DEVICE" > "$DRIVER_DIR/bind" 2>/dev/null || true
sleep 1
fi
# Verify
echo ""
echo "Verifying..."
if cat /proc/bus/input/devices | grep -q -i "Touchpad"; then
echo "Touchpad detected: OK"
else
echo "Warning: Touchpad not detected after reset" >&2
fi
# Reset GNOME touchpad settings if in graphical session
if command -v gsettings &>/dev/null && [[ -n "${DISPLAY:-}" || -n "${WAYLAND_DISPLAY:-}" ]]; then
echo ""
echo "Resetting GNOME touchpad settings..."
gsettings set org.gnome.desktop.peripherals.touchpad send-events 'enabled' 2>/dev/null && \
echo "GNOME touchpad enabled: OK" || \
echo "Warning: Could not set GNOME setting (may need user session)"
fi
echo ""
echo "=== Done ==="
echo "If the touchpad still does not work, try: sudo bash $0 --module"
上記が効かない場合
ドライバーモジュールの再読み込み
sudo bash /opt/lxd-data/script/fix-touchpad1.sh --module
トラブルシューティング
| 症状 | 対処 |
|---|---|
| “No touchpad device found” | cat /proc/bus/input/devices でタッチパッドが検出されているか確認 |
| 基本実行で効かない | --module オプションを試す |
| それでも効かない | リブートが必要な場合がある |
| GNOME設定が反映されない | グラフィカルセッション(DISPLAY環境変数)が必要 |
手動での同様処理
bash
# タッチパッドデバイスのi2c IDを確認
cat /proc/bus/input/devices | grep -A5 -i touchpad
# ドライバーの unbind
echo "i2c-DEVICE_NAME" | sudo tee /sys/bus/i2c/drivers/i2c_hid_acpi/unbind
# ドライバーの rebind
echo "i2c-DEVICE_NAME" | sudo tee /sys/bus/i2c/drivers/i2c_hid_acpi/bind
自動実行設定(オプション)
ログイン時に自動実行したい場合:
# systemdサービスとして作成
cat << 'EOF' | sudo tee /etc/systemd/system/fix-touchpad.service
[Unit]
Description=Fix touchpad after remote desktop
After=network.target
[Service]
Type=oneshot
ExecStart=/opt/lxd-data/script/fix-touchpad1.sh
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable fix-touchpad.service
サスペンド後にキーボードやタッチパッドが効かなくなる場合
こちらのほうが多いのかも。使用しているPCによっても変わってきます。
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT の行を下記のように
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.reset i8042.nomux"
その後grubを更新し、
sudo update-grub
更新したらシステムを再起動します。
また、下記で直ったという情報もあるようです。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash atkdb.reset i8042.nomux"

