De "dentro" do ambiente Windows, você pode ler a variável de ambiente WINEPREFIX
. Veja como você pode fazer isso em cmd
:
$ WINEPREFIX=/home/lesmana/tmp/somewineprefix wine cmd
(bunch of wine output)
Z:\home\lesmana> echo %WINEPREFIX%
/home/lesmana/tmp/somewineprefix
Você pode inspecionar outras variáveis de ambiente usando o cmd
command set
.
Se você começou o vinho sem WINEPREFIX
, não há WINEPREFIX
variável definida. Nesse caso, o wineprefix deve ser o padrão ( $HOME/.wine
).
Não encontrei uma maneira fácil ou "oficial" de obter o prefixo de vinho "fora" do ambiente do vinho. Aqui está um "hack":
Primeiro, você precisa do PID do processo do wineserver:
$ pgrep -fl wineserver
5197 wineserver
Depois, você pode espiar as variáveis de ambiente do processo:
$ cat /proc/5197/environ | tr '$ 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)
' '\n' | grep -i wine
WINEDLLOVERRIDES=winemenubuilder.exe=d;
WINEPREFIX=/home/lesmana/tmp/somewineprefix
_=/usr/bin/wine
WINELOADERNOEXEC=1
Novamente, se você começou o vinho sem WINEPREFIX
, não haverá WINEPREFIX
variável.
Como alternativa, você pode verificar os descritores de arquivo do processo:
$ 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
...
Existe um problema: se há vários processos de wineserver, você deve descobrir qual wineerver pertence a qual processo de wine. Mais uma vez, não encontrei uma maneira fácil de fazer essa correlação. A única maneira que encontrei é inspecionar os timestamps dos processos.
$ WINEPREFIX=/home/lesmana/tmp/somewineprefix wine cmd
(bunch of wine output)
Z:\home\lesmana> echo %WINEPREFIX%
/home/lesmana/tmp/somewineprefix
Aqui estão dois processos vitivinícolas e dois processos wineerver iniciados com um minuto de intervalo. É possível obter ps
para relatar o tempo em segundos, se necessário.
Infelizmente, o processo do wineserver é iniciado como algum tipo de daemon e não é filho do processo do vinho. Então não tem sorte com o PPID.