setcap cap_sys_time 不适用于 wine

setcap cap_sys_time 不适用于 wine

我的任务是在 Linux 发行版上运行我们仅适用于 Windows 的软件。因此,我决定在 Ubuntu 18.04 上的 wine 上运行它。Ubuntu 是从网络安装的,所以我几乎什么都没有,只有 X11、openbox,我通过 xterm 配置一切。

在 Windows 上,我们的软件从我们的设备(在 GPS 卫星的 IRIG-B 上运行)接收时间并更改系统时间,以便计算机时间和设备时间同步。软件每 5 分钟验证并尝试一次。

周末我让软件在 wine 上运行,没有wine "path"将进程与 xterm 分离,当我回来时,我注意到每隔 5 分钟左右我就会收到一堆这样的消息:

err:ntdll:NtSetSystemTime Cannot set time to Mon Jun 18 09:49:19 2018
, time adjustment -3153: Operation not permitted

于是我检查了的 wine 源,NtSetSystemTime发现它是 的包装器settimeofday。于是我查看了 的手册页settimeofday,上面说它需要CAP_SYS_TIME。于是我setcap使用cap_sys_time+ep、和软件可执行文件,但它不起作用。wine-stablewineserver

+ep我尝试了、+ei和的组合+eip,但也没有用。我已使用 关闭了 NTP timedatectl set-ntp 0,并尝试将其设置为set-local-rtc开启和关闭。

我也尝试过将系统时间改为大约 10 分钟,看看是否会改变它,但也没有发现任何问题。

我已经没什么可尝试的了。我还缺少什么?我只需要能够让软件更改系统时间。

答案1

我明白了。在搜索了更多与葡萄酒相关的内容后,我意识到实际上还有很多与葡萄酒相关的内容/usr/lib/wine

尽管which wine返回的/usr/bin/wine是符号链接/usr/bin/wine-stable,但您真正想要的setcap/usr/lib/wine/wine

总而言之,这对我有用:

sudo setcap cap_sys_time+ep /usr/lib/wine/wine

我对它们全部进行了测试,并找出了哪些不需要上限,最后得出结论,只有那一个才真正需要上限。

相关内容