2个不稳定版本
0.2.0 | 2023年6月18日 |
---|---|
0.1.0 | 2023年6月17日 |
#9 in #evdev
13KB
63 代码行数(不包括注释)
shortcutd
使用evdev的全局快捷键
什么是
shortcutd是一个守护进程和客户端库,允许监听不支持该功能(如wayland)的系统上的全局快捷键。
通过将挂钩到evdev(需要以root权限执行)的代码分离到一个单独的守护进程,它允许非特权用户挂钩到全局快捷键。
通过仅允许同时注册3个没有修饰符的快捷键来防止客户端使用shortcutd守护进程作为键盘记录器。
启动守护进程
- 将dbus配置文件
nl.icewind.shortcutd.conf
复制到/etc/dbus-1/system.d/
- 以root身份启动守护进程(或使用提供的systemd服务)。
Rust API
use futures::{pin_mut, StreamExt};
use shortcutd::{Shortcut, ShortcutClient};
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let client = ShortcutClient::new().await?;
let shortcut: Shortcut = "<Ctrl><Alt>-KeyO".parse()?;
let stream = client.listen(shortcut).await?;
pin_mut!(stream);
while let Some(event) = stream.next().await {
println!("{} {}", event.shortcut, event.state);
}
Ok(())
}
D-Bus API
-
使用
Register
方法在nl.icewind.shortcutd
/register
中注册一个新的快捷键。 -
监听从
Register
方法返回的路径处的信号,以在快捷键被触发时收到通知。信号提供了一个布尔参数,用于区分快捷键的按下和释放。
依赖关系
~12–24MB
~347K SLoC