setcap cap_sys_time не работает для вина

491
skwear

Мне было поручено запустить наше программное обеспечение только для Windows в дистрибутиве Linux. Поэтому я решил запустить его на Wine в Ubuntu 18.04. Ubuntu из сетевой установки, так что у меня почти ничего нет, кроме X11, openbox, и я все настраиваю через xterm.

В Windows наше программное обеспечение получает время от нашего оборудования (работает на IRIG-B от спутникового GPS) и изменяет системное время, чтобы синхронизировать время компьютера и время оборудования. Программное обеспечение проверяет и пытается это каждые 5 минут.

Я оставил программное обеспечение работающим на Wine на выходных wine "path"без отключения процесса от xterm, и когда я вернулся, я заметил, что получаю кучу этих сообщений в xterm каждые 5 минут или около того:

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

Поэтому я проверяю источник вина NtSetSystemTimeи вижу, что это обертка для settimeofday. Так что я смотрю man страницу settimeofdayи там написано, что для этого требуется CAP_SYS_TIME. Так что я setcapс cap_sys_time+epдля wine-stable, wineserverи программное обеспечение, исполняемый, но он не работает.

Я попробовал комбинацию +ep, +eiи +eip, но это не работает. Я отключил NTP с помощью timedatectl set-ntp 0и попытался включить set-local-rtcи выключить.

Я также попытался изменить системное время примерно на 10 минут, чтобы посмотреть, изменит ли это его, но это тоже ничего не раскрыло.

У меня кончились вещи, чтобы попробовать. Что мне не хватает? Мне просто нужно, чтобы программа смогла изменить системное время.

0

1 ответ на вопрос

0
skwear

Я понял. После того, как я покопался в поисках новых вещей, связанных с вином, я понял, что на самом деле есть еще много вещей, связанных с вином /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 

Я проверил их все, выяснил, кому из них не нужна кепка, и пришел к выводу, что только эта действительно нужна кепка.