概要
- 何が起こった。
ラップトップのタッチパッドで右クリック長押しをできるようにするだけのツールholdownが以下のエラーを出して動かなくなってしまった。
sudo holdown
# input device not found
- 原因
原因はlibinputのCLI機能がlibinput-toolsに分離されたことで、入力デバイスを列挙するlibinput list-devicesが動かなくなってしまったことである。
- 解決策
以下を実行す。
sudo pacman -S libinput-tools
これによってlibinputのcliコマンドが使えるようになり解決した。
他にも sudo libinput debug-events も再び使えるようになった
問題発見の手順
-
sudo holdownがコケる -
sudo libinput debug-eventsが動かない -
/usr/bin/libinputが存在しない -
libinput-toolsというそれっぽいものインストールして解決
再発防止のために
- holdownのエラーメッセージが貧弱
入力デバイスを発見に失敗した場合、libinputが存在しないことや権限がないことで発見できなかったとしても一律でinput device not foundというエラーメッセージを出していた
async fn find_touchpad_event() -> Option<String> {
let output = Command::new("libinput")
.arg("list-devices")
.output()
.await
.ok()?;//ここで失敗してもただNoneが返るのみ
let stdout = String::from_utf8_lossy(&output.stdout);
for line in stdout.lines() {
if line.contains("Device:") && line.contains("Touchpad") {
println!("{}",line);
if let Some(next_line) = stdout.lines().skip_while(|l| *l != line).nth(1) {
println!("{}",next_line);
if let Some(path) = next_line.trim().strip_prefix("Kernel:") {
println!("{}",path);
return Some(path.trim().to_string());
}
}
}
}
None
//タッチパッドがなかったときもlibinputがなかったとき同様にNoneを返す
}
そんなわけでResult型でエラー内容を返答できるように改良を加えた
学んだこと
どこで止まったか分かるちゃんとしたエラーメッセージを出すようにすると原因がわかりやすいのでやる。