From 2d91104c66d69931524a12a89abc7602eb727606 Mon Sep 17 00:00:00 2001 From: Jeremy Whiting Date: Wed, 4 Jun 2025 15:24:58 -0600 Subject: [PATCH] screenreader: Use uinput to send keyboard events. Orca has no API, so use keyboard events to trigger specific actions like sticking to focus mode, browse mode, etc. Also add new get and set methods to steamosctl for mode. --- Cargo.lock | 37 +++++- Cargo.toml | 1 + com.steampowered.SteamOSManager1.xml | 9 ++ data/user/steamos-manager.service | 1 + src/bin/steamosctl.rs | 22 ++++ src/lib.rs | 2 +- src/manager/user.rs | 24 +++- src/proxy/screenreader0.rs | 6 + src/screenreader.rs | 168 +++++++++++++++++++++++++++ 9 files changed, 266 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a2e9c7d..83b93c5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -563,6 +563,26 @@ dependencies = [ "libc", ] +[[package]] +name = "input-linux" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e8c4821c88b95582ca69234a1d233f87e44182c42e121f740efb0bec1142e0" +dependencies = [ + "input-linux-sys", + "nix 0.29.0", +] + +[[package]] +name = "input-linux-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b91b2248b0eaf0a576ef5e60b7f2107a749e705a876bc0b9fe952ac8d83a724" +dependencies = [ + "libc", + "nix 0.29.0", +] + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -661,6 +681,18 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags", + "cfg-if", + "cfg_aliases", + "libc", +] + [[package]] name = "nix" version = "0.30.1" @@ -1000,10 +1032,11 @@ dependencies = [ "config", "gio", "inotify", + "input-linux", "itertools", "lazy_static", "libc", - "nix", + "nix 0.30.1", "num_enum", "regex", "serde", @@ -1510,7 +1543,7 @@ dependencies = [ "futures-core", "futures-lite", "hex", - "nix", + "nix 0.30.1", "ordered-stream", "serde", "serde_repr", diff --git a/Cargo.toml b/Cargo.toml index b9dd2aa..3599834 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ clap = { version = "4.5", default-features = false, features = ["derive", "help" config = { version = "0.15", default-features = false, features = ["async", "ini", "toml"] } gio = "0.20" inotify = { version = "0.11", default-features = false, features = ["stream"] } +input-linux = "0.7" itertools = "0.14" lazy_static = "1" libc = "0.2" diff --git a/com.steampowered.SteamOSManager1.xml b/com.steampowered.SteamOSManager1.xml index f5b8648..f3fcd04 100644 --- a/com.steampowered.SteamOSManager1.xml +++ b/com.steampowered.SteamOSManager1.xml @@ -333,6 +333,15 @@ The volume for speech output. Valid values ar 0.0 for off, 10.0 for highest. --> + + +