我的任务是在 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-stable
wineserver
+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
我对它们全部进行了测试,并找出了哪些不需要上限,最后得出结论,只有那一个才真正需要上限。