2个不稳定版本

0.2.0 2023年6月18日
0.1.0 2023年6月17日

#9 in #evdev

MIT/Apache

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