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
相关产品推荐
相关产品推荐

