Wine上で動作しているプログラムから見た環境変数は以下のようになる。
Linux版SteamでProtonを使用する際の環境変数(DXVK関係含む)についても、基本的にはゲームごとの “起動オプション” における実行時の変数としてそのまま指定するだけで反映されると考えて問題ない(例:DXVK_HUD=... %command%
)。
Windows用の幾つかの特殊な定義済み環境変数についてはWine内でも(初期状態では)置き換えられる。
具体的にはPATH
やTEMP
/TMP
などで、他のものについては後述のシステム環境変数のレジストリ階層を参照。
これらを削除するとそのWine環境(WINEPREFIX
で指定される実行環境)内のプログラムが正しく動作しなくなるおそれがある。
Windowsと同様、Wine内の環境変数にはシステム全体の環境変数とユーザ別の環境変数がある。
PATH
の場合だけはシステム環境変数PATH
の後ろにユーザ環境変数PATH
が付け加えられる仕様(Wine 1.1.38以上)
PATH
も自由に変更できるため、ユーザ環境変数のPATH
が低優先度であることが問題になることはないPATH
についてもシステム環境変数PATH
を置き換える仕様だったHKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\
以下の環境変数名の項目HKEY_CURRENT_USER\Environment\
以下の環境変数名の項目TEMP
とTMP
を変更するレジストリファイルの例
REGEDIT4
[HKEY_CURRENT_USER\Environment]
"TEMP"="Z:\\path\\to\\tempdir"
"TMP"="Z:\\path\\to\\tempdir"
一時フォルダの場所をtmpfsのディレクトリに指定すると、一時ファイルのアクセスが高速になってストレージへの書き込みも抑えられる。
引数に任意の数の環境変数名を指定して実行する。
getenvtest.c
ライセンス:CC0
#include <stdio.h>
#include <stdlib.h>
/*
* 引数に指定した環境変数を表示するテスト
* CC0
*
* x86_64-w64-mingw32-gcc -O2 -Wall -Wextra getenvtest.c -o getenvtest.exe
* i686-w64-mingw32-gcc -O2 -Wall -Wextra getenvtest.c -o getenvtest.exe
*/
int
main(int argc, char **argv)
{
int i;
char *name, *val;
for (i = 1; i < argc; i++)
{
name = argv[i];
val = getenv(name);
printf("%s: %s\n", name, (val != NULL) ? val : "(undefined)");
}
return EXIT_SUCCESS;
}
$ wine /path/to/getenvtest.exe LANG TEMP PATH FOOBAR
LANG: ja_JP.UTF-8
TEMP: C:\users\username\Temp
PATH: C:\windows\system32;C:\windows;C:\windows\system32\wbem;C:\windows\system32\WindowsPowershell\v1.0
FOOBAR: (undefined)