Como saber qual WINEPREFIX está em uso

1

Existe um comando para ver qual wineprefix está atualmente ativo quando eu executo wine ?

    
por Wolf 24.09.2016 / 20:58

1 resposta

3

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.

    
por 25.09.2016 / 15:48

Tags