2

我正在使用 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 规则绕过了热插拔脚本触发的类似问题,从而更改了新连接(匹配)设备的权限。我想坚持守护进程用户。我怎样才能做到这一点?

4

3 回答 3

1

如果您的应用程序没有沙盒化,则您不需要任何权利,所以听起来这不是您的问题。并且该应用程序是否是守护程序也无关紧要。

相关的是操作系统是否将您的设备视为键盘。为了降低键盘记录器滥用的风险,OS X 要求任何想要直接与键盘对话的应用程序都必须以 root 身份运行。不幸的是,许多非键盘 HID 设备将自己呈现为键盘(例如无线演示者遥控器)。这可能就是你所看到的。

您可以通过以 root 身份运行来解决此问题,或者,如果您可以控制硬件本身,则可以将其使用页面值更改为 7(键盘)以外的值。

于 2014-05-05T17:26:27.997 回答
1

我打开了 Apple Developer Support Ticket 并得到了一些答案。问题不在于我的应用程序作为用户“守护进程”运行。至少,不完全是……

应用程序必须以经过身份验证的(登录交互式)用户或“root”身份运行。所以,如果我可以作为“守护进程”登录,它可能会运行。实际上,这并没有帮助。我需要一个(launchd)守护进程,因为我的应用程序的功能是一种可通过网络访问的服务器。因此,我必须以用户“root”身份运行应用程序——无论如何,这对于 lauchd 守护进程来说都是危险的默认设置。

于 2012-12-20T10:44:54.857 回答
0

IIRC Lion 将必要的 priv 提升了一个档次……现在你需要一个沙盒权利;可能是“com.apple.security.device.usb”。

于 2012-12-14T00:04:08.780 回答