您可以从 windows 环境的“内部”读取环境变量WINEPREFIX
。您可以通过以下方式做到这一点cmd
:
$ WINEPREFIX=/home/lesmana/tmp/somewineprefix wine cmd
(bunch of wine output)
Z:\home\lesmana> echo %WINEPREFIX%
/home/lesmana/tmp/somewineprefix
Run Code Online (Sandbox Code Playgroud)
您可以使用cmd
命令检查其他环境变量set
。
如果你没有开始葡萄酒,WINEPREFIX
那么就没有WINEPREFIX
变量集。在这种情况下, wineprefix 应该是默认值 ( $HOME/.wine
)。
我发现没有简单或正式的方法可以从 wine 环境的“外部”获取 wineprefix。这是一个黑客:
首先你需要wineserver进程的PID:
$ pgrep -fl wineserver
5197 wineserver
Run Code Online (Sandbox Code Playgroud)
然后可以查看进程的环境变量:
$ cat /proc/5197/environ | tr '\0' '\n' | grep -i wine
WINEDLLOVERRIDES=winemenubuilder.exe=d;
WINEPREFIX=/home/lesmana/tmp/somewineprefix
_=/usr/bin/wine
WINELOADERNOEXEC=1
Run Code Online (Sandbox Code Playgroud)
再说一次,如果你没有开始葡萄酒,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)
Run Code Online (Sandbox Code Playgroud)
有一个问题:如果有多个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
...
Run Code Online (Sandbox Code Playgroud)
这里有两个 wine 进程和两个 wineserver 进程相隔一分钟启动。ps
如果需要,可以以秒为单位报告时间。
不幸的是,wineserver 进程是作为某种守护进程启动的,而不是wine 进程的子进程。所以PPID没有运气。