有时需要用root运行kate,然而使用下面的命令:
sudo kate 文件名
会得到下面一段话:
Running Kate with sudo can cause bugs and expose you to security vulnerabilities
. Instead use Kate normally and you will be prompted for elevated privileges whe
n saving documents if needed.
但是如果按它提示的去做,会发现很坑——kate会用普通用户复制出一个临时文件来编辑,保存时再提示su用的root密码或sudo用的当前用户密码,然而如果是像/root/.bashrc之类的普通用户访问不到的文件,就会报错或者按照空文件打开,复制为临时文件也可能会导致智能提示失效。
其实很简单,使用下面的命令即可成功以root打开kate:
sudo SUDO_USER= kate 文件名
如果是kdesu的话(kdesu已不推荐使用,因此不在$PATH中),可使用下面的命令:
/usr/lib/x86_64-linux-gnu/libexec/kf5/kdesu SUDO_USER= KDESU_USER= kate
注:kate/kwrite/dolphin在2017年的17.04开始加入不允许以root运行的限制,2018年的18.08改为不允许使用sudo和kdesu运行。17.04、17.08、17.12、18.04这几个版本无法以任何方式实现以root方式运行,除非重新编译或二进制修改,可使用下面的命令获得kate/kwrite/dolphin版本:
kate -v
kwrite -v
dolphin -v
参考资料:
kate源码(apps/kate/main.cpp或apps/lib/kateapp.cpp)
#if !defined(Q_OS_WIN) && !defined(Q_OS_HAIKU)
// Prohibit using sudo or kdesu (but allow using the root user directly)
if (getuid() == 0) {
setlocale(LC_ALL, "");
bindtextdomain("kate", KDE_INSTALL_FULL_LOCALEDIR);
if (!qEnvironmentVariableIsEmpty("SUDO_USER")) {
auto message = kli18n(
"Running this editor with sudo can cause bugs and expose you to security vulnerabilities. "
"Instead use this editor normally and you will be prompted for elevated privileges when "
"saving documents if needed.");
std::cout << dgettext("kate", message.untranslatedText()) << std::endl;
exit(EXIT_FAILURE);
} else if (!qEnvironmentVariableIsEmpty("KDESU_USER")) {
auto message = kli18n(
"Running this editor with kdesu can cause bugs and expose you to security vulnerabilities. "
"Instead use this editor normally and you will be prompted for elevated privileges when "
"saving documents if needed.");
std::cout << dgettext("kate", message.untranslatedText()) << std::endl;
exit(EXIT_FAILURE);
}
}
#endif