Установить маску для модуля systemd

Из "внутренней" среды windows вы можете прочитать переменную окружения WINEPREFIX. Вот как это можно сделать из cmd:

$ WINEPREFIX=/home/lesmana/tmp/somewineprefix wine cmd
(bunch of wine output)
Z:\home\lesmana> echo %WINEPREFIX%
/home/lesmana/tmp/somewineprefix

Вы можете проверить другие переменные окружения, используя cmd команду set.

Если вы запустили wine без WINEPREFIX, то переменная WINEPREFIX не установлена. В этом случае префикс wine должен быть по умолчанию ($HOME/.wine).

Я не нашел простого или "официального" способа получить wineprefix из "внешнего" окружения wine. Вот "хак":

Сначала вам нужен PID процесса wineserver:

$ pgrep -fl wineserver
5197 wineserver

Затем вы можете заглянуть в переменные окружения процесса:

$ cat /proc/5197/environ | tr '\0' '\n' | grep -i wine
WINEDLLOVERRIDES=winemenubuilder.exe=d;
WINEPREFIX=/home/lesmana/tmp/somewineprefix
_=/usr/bin/wine
WINELOADERNOEXEC=1

Опять же, если вы запустили wine без WINEPREFIX, то переменной WINEPREFIX не будет.

Также вы можете проверить дескрипторы файлов процесса:

$ ls -l /proc/5197/fd | grep wine
lr-x------ 1 lesmana users 64 25. Sep 15:27 114 -> /home/lesmana/tmp/somewineprefix/drive_c/windows
lr-x------ 1 lesmana users 64 25. Sep 15:27 32 -> /home/lesmana/tmp/somewineprefix/drive_c/windows
lr-x------ 1 lesmana users 64 25. Sep 15:27 4 -> /home/lesmana/tmp/somewineprefix
lr-x------ 1 lesmana users 64 25. Sep 15:27 48 -> /home/lesmana/tmp/somewineprefix/drive_c/windows/system32
lr-x------ 1 lesmana users 64 25. Sep 15:27 5 -> /tmp/.wine-1000/server-802-2e0ac4 (deleted)
l-wx------ 1 lesmana users 64 25. Sep 15:27 6 -> /tmp/.wine-1000/server-802-2e0ac4/lock (deleted)

Есть одна проблема: если есть несколько процессов wineserver, то вы должны найти, какой wineserver принадлежит какому процессу wine. И снова я не нашел простого способа установить это соотношение. Единственный способ, который я нашел, это просмотр временных меток процессов.

$ ps -ef
...
lesmana   5096  5085  0 22:33 pts/2    00:00:00 /bin/sh /home/lesmana/bin/wine cmd
lesmana   5097  5096  0 22:33 pts/2    00:00:00 cmd
lesmana   5100   614  0 22:33 ?        00:00:02 /usr/bin/wineserver
lesmana   5104   614  0 22:33 ?        00:00:00 C:\windows\system32\services.exe
lesmana   5110   614  0 22:33 ?        00:00:00 C:\windows\system32\explorer.exe /desktop
lesmana   5144   614  0 22:33 ?        00:00:03 C:\windows\system32\winedevice.exe
lesmana   5193  5093  0 22:34 pts/3    00:00:00 /bin/sh /home/lesmana/bin/wine cmd
lesmana   5194  5193  0 22:34 pts/3    00:00:00 cmd
lesmana   5197   614  0 22:34 ?        00:00:06 /usr/bin/wineserver
lesmana   5201   614  0 22:34 ?        00:00:00 C:\windows\system32\services.exe
lesmana   5207   614  0 22:34 ?        00:00:00 C:\windows\system32\explorer.exe /desktop
lesmana   5345   614  0 22:34 ?        00:00:03 C:\windows\system32\winedevice.exe
...

Вот два процесса wine и два процесса wineserver, запущенные с разницей в одну минуту. При необходимости можно заставить ps сообщить время в секундах.

К сожалению, процесс wineserver запускается как некий демон и не является дочерним процессом процесса wine. Так что с PPID не получилось.

3
29.05.2017, 01:26
1 ответ

В секции [Service]есть директива UMask= . Обратите внимание, что на самом деле это UMask с заглавной M .

16
27.01.2020, 21:21

Теги

Похожие вопросы