Filter env variables passed to Minecraft

QT_* and LD_* are not passed through
env variables are logged on launch
This commit is contained in:
Petr Mrázek 2014-11-01 14:11:20 +01:00
parent 095640ed01
commit 3d1426b559

View File

@ -41,14 +41,37 @@ MinecraftProcess::MinecraftProcess(InstancePtr inst) : m_instance(inst)
SLOT(finish(int, QProcess::ExitStatus)));
// prepare the process environment
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
QProcessEnvironment rawenv = QProcessEnvironment::systemEnvironment();
QProcessEnvironment env;
for(auto key: rawenv.keys())
{
auto value = rawenv.value(key);
// filter MultiMC-related things
if(key.startsWith("QT_"))
{
QLOG_INFO() << "Env: ignoring" << key << value;
continue;
}
#ifdef LINUX
// Do not pass LD_* variables to java. They were intended for MultiMC
if(key.startsWith("LD_"))
{
QLOG_INFO() << "Env: ignoring" << key << value;
continue;
}
// Strip IBus
// IBus is a Linux IME framework. For some reason, it breaks MC?
if (env.value("XMODIFIERS").contains(IBUS))
env.insert("XMODIFIERS", env.value("XMODIFIERS").replace(IBUS, ""));
if (key == "XMODIFIERS" && value.contains(IBUS))
{
QString save = value;
value.replace(IBUS, "");
QLOG_INFO() << "Env: stripped" << IBUS << "from" << save << ":" << value;
}
#endif
QLOG_INFO() << "Env: " << key << value;
env.insert(key, value);
}
// export some infos
auto variables = getVariables();