我正在使用hidapi来访问HID设备(不是鼠标或键盘)。最支持的操作系统版本是10.6,我目前正在使用Mac OX X 10.6.8。如果我的Mac OS X可执行文件以正常用户权限运行,它可以枚举设备,识别供应商使用的设备和产品ID,并打开它:
IOHIDDeviceRef os_dev = ...
IOReturn ret = IOHIDDeviceOpen(os_dev, kIOHIDOptionsTypeNone);
if (ret == kIOReturnSuccess) { ... } // here I get kIOReturnNotPrivileged for daemon
实际上,可执行文件应该作为守护程序运行,但IOHIDDeviceOpen
失败并显示kIOReturnNotPrivileged
。对于Linux,我通过udev规则解决了热插拔脚本引发的类似问题,从而更改了新连接(匹配)设备的权限。
我想坚持守护进程用户。我怎样才能做到这一点?
答案 0 :(得分:1)
我已经开通了Apple开发者支持服务单并获得了一些答案。问题不在于,我的应用程序是作为用户'守护进程'运行的。至少,不完全是......
应用程序必须作为经过身份验证的(已登录的交互式)用户运行 - 或“root”。所以,如果我可以作为'守护进程'登录它可能会运行。实际上,这没有用。 我需要一个(launchd)守护进程,因为我的应用程序的功能是一种可通过网络访问的服务器。因此,我必须以“root”用户身份运行应用程序 - 无论如何,这是lauchd守护进程的危险默认值。
答案 1 :(得分:1)
如果您的应用没有沙盒,则不需要任何权利,因此听起来这不是您的问题。而且应用程序是否是守护进程也无关紧要。
相关的是操作系统是否将您的设备视为键盘。为了降低键盘记录程序滥用的风险,OS X要求任何想要直接与键盘对话的应用程序必须以root用户身份运行。不幸的是,许多非键盘HID设备将其自身呈现为键盘(例如,无线演示器遥控器)。这可能是你所看到的。
您可以通过以root身份运行来修复此问题,或者,如果您可以通过将其使用页面值更改为7以外的其他内容(键盘)来控制硬件本身,则可以解决此问题。
答案 2 :(得分:0)