有时需要用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
11-26 17:18