You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS平台Tauri应用全局键鼠事件监听问题(rdev无效)

在MacOS的Tauri应用中使用rdev监听全局键鼠事件无输出的问题

问题描述

我在MacOS平台的Tauri应用里尝试用rdev库监听全局键盘和鼠标事件,但代码运行后终端没有任何输出。代码如下:

use rdev::{listen, Event};
use std::thread;
use tauri::Manager;

fn callback(event: Event) {
    println!("My callback {:?}", event);
}

fn main() {
    thread::spawn(|| listen(callback));
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![])
        .setup(|app| {
            let window = app.get_window("main").unwrap();
            window.open_devtools();
            Ok(())
        })
        .run(tauri::generate_context!())
        .expect("error while running Tauri application");
}

解决步骤

1. 开启MacOS辅助功能权限

MacOS会限制未授权应用监听全局输入事件,必须手动授权:

  • 打开「系统设置」→「隐私与安全性」→「辅助功能」
  • 找到你Tauri应用的可执行文件(开发阶段在target/debug目录下),勾选允许其访问辅助功能
  • 若已勾选,先取消再重新勾选,然后重启应用

2. 修复线程错误处理逻辑

原代码未处理listen函数的返回错误,一旦权限不足或其他异常,监听线程会静默退出。修改代码添加错误捕获:

thread::spawn(|| {
    if let Err(e) = listen(callback) {
        eprintln!("监听事件出错: {:?}", e);
    }
});

3. 检查Tauri权限配置

在tauri.conf.json中确保应用权限未被过度限制,开发阶段可临时开启全权限测试:

"tauri": {
  "security": {
    "allowlist": {
      "all": true
    }
  }
}

4. 确认监听线程生命周期

listen函数会持续阻塞线程直到出错,只要权限配置正确,后台线程会一直运行,不会被Tauri主线程影响。添加错误打印后,能快速排查权限缺失等核心问题。

完整修改后的代码

use rdev::{listen, Event, Error};
use std::thread;
use tauri::Manager;

fn callback(event: Event) {
    println!("My callback {:?}", event);
}

fn main() {
    thread::spawn(|| {
        match listen(callback) {
            Ok(_) => println!("监听正常退出"),
            Err(e) => eprintln!("监听失败: {:?}", e),
        }
    });

    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![])
        .setup(|app| {
            let window = app.get_window("main").unwrap();
            window.open_devtools();
            Ok(())
        })
        .run(tauri::generate_context!())
        .expect("error while running Tauri application");
}

内容的提问来源于stack exchange,提问作者Coder_Reshmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:21:06