创建用户 ID“root”以强制“gedit”创建用户配置文件

创建用户 ID“root”以强制“gedit”创建用户配置文件

当使用sudo权力并调用gedit顶级菜单时File Edit View Search Tools Documents Help缺少。

如果我创建用户 ID并登录一次并调用gedit它将创建必要的用户配置文件可能解决这个问题?

sudo每当我使用,gksu或者pkexec以具有提升权限的普通用户身份使用 时,这是否也会使恼人的错误消息消失gedit

Nautilus 和其他 Gnome 衍生的 Ubuntu 应用程序还有其他好处吗?

笔记:通过sudo谷歌搜索,您可以获得pkexec gedit3.5k 次、gksu gedit40k 次或sudo gedit500k 次搜索结果。我是少数使用第一种方法的人,但我相信它将成为 Ubuntu 17.04 的标准。


2017 年 6 月 12 日更新以下是使用时遇到的错误列表pkexec gedit

(gedit:13003): Gtk-WARNING **: Calling Inhibit failed: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.SessionManager was not provided by any .service files

** (gedit:13003): WARNING **: Set document metadata failed: Setting attribute metadata::gedit-spell-enabled not supported

** (gedit:13003): WARNING **: Set document metadata failed: Setting attribute metadata::gedit-encoding not supported

** (gedit:13003): WARNING **: Set document metadata failed: Setting attribute metadata::gedit-position not supported

在此错误报告承诺将于 2017 年 6 月 5 日修复这些令人分心的消息。但没有迹象表明何时会修复,也没有表明是否会实现该功能或错误消息是否会消失。

请注意,该错误报告是在一年前提交的,在此期间它仅影响了 18 个人。

答案1

再次感慨。请勿以 root 身份使用图形应用程序!

现在,上述规则也有一些例外。例如,Ubuntu 控制面板中任何需要 root 权限的部分通常都是安全的,但这只是因为它只会在需要时保留权限,此时它会立即将其转储回正常模式。同样,它们也经过专门设计,可以root有效使用,并且不会破坏任何东西。简而言之,一切gedit和大多数其他应用程序都不会这样做。

如果您确实需要gedit在文件夹中拥有自己的配置/root,请像这样启动它:

sudo -i gedit

然而,这仍然由于多种原因,菜单栏消失或多或少是阿耶塔那的菜单系统正常运行。简而言之,系统正在尝试为用户创建/由root用户拥有的菜单对象,这导致事情明显中断。

sudo您可以使用的标志来解决缺少菜单的问题-E,但这仍然会导致 DBus/DConf/whatever 对您产生不满。在此模式下,菜单将gedit直接嵌入到 的窗口中,因为我们仍然无法获得与 DBus/Ayatana 的链接。

这呼应了 Ubuntu 开发人员的情绪,并且不是一个错误他们认为 GUI 实际上是“简单模式”,root访问实际上是不是“简单模式”。如果您愿意root,请转到终端并在那里使用它。事实上,这几乎是一种有效的抵抗形式——如果您不能使用它nano来编辑文件,您就不应该以用户身份四处探索root

如果你绝对必须root在 GUI 下使用(我高度建议您不要这样做,即使作为其自己的用户),创建一个名为的文件/etc/lightdm/lightdm.conf并将其放入该文件中:

[SeatDefaults]
greeter-show-manual-login=true

lightdm使用重新启动服务sudo systemctl restart lightdm.service,您便可以以 身份登录root。如果您不使用lightdm,请查找并按照该显示管理器的说明进行操作。

您还需要重新启用 root 帐户,只需运行以下命令即可完成:

sudo passwd root

一定要选择一个非常强的密码,因为这将允许 root 登录你的系统。请注意,这是反对那里的每一个建议,因为sudo它存在并且更安全/不太可能让你意外破坏某些东西。

需要注意的是,当您实际执行此操作时,gedit它将在用户会话中以 root 身份运行(如您所期望的那样)root。但是,当您返回主会话时,它仍然会拒绝运行(出于上述原因)。


不应随意使用该root帐户来绕过令人讨厌的错误。请将该消息视为以下内容:Permission denied

嘿,你在做什么可能会对您的系统产生严重的副作用。请仔细考虑并仔细检查您的命令,以确保您执行的操作正是您想要执行的操作。如果您确定这是您想要执行的操作,请升级到可用于执行您想要的操作的最低权限级别。

即便如此,看看是否有解决方案不涉及升级到特权帐户。删除并重新创建损坏的用户比重新创建损坏的系统要容易得多。

答案2

我最终放弃了 root / sudo 拥有自己的配置设置gedit。我也放弃了pkexec替换gksu,而是改用sudo -H。然后我创建了一个脚本来“借用”当前用户的配置设置进行初始化:

  • 插件
  • 字体名称和大小
  • 制表位和将制表符转换为空格选项
  • 换行与水平滚动条
  • 所有其他当前用户gedit配置设置可能

不用多说,以下是脚本:

#!/bin/bash

# NAME: sgedit
# PATH: /mnt/e/bin
# DESC: Run gedit as sudo using $USER preferences
# DATE: June 17, 2018.

# Must not prefix with sudo when calling script
if [[ $(id -u) == 0 ]]; then
    zenity --error --text "You cannot call this script using sudo. Aborting."
    exit 99
fi

# Get user preferences before elevating to sudo
gsettings list-recursively | grep -i gedit | grep -v history | \
    grep -v docinfo | \
    grep -v virtual-root | grep -v state.window > /tmp/gedit.gsettings

sudoFunc () {

    # Must be running as sudo
    if [[ $(id -u) != 0 ]]; then
        zenity --error --text "Sudo password authentication failed. Aborting."
        exit 99
    fi

    # Get sudo's gedit preferences
    gsettings list-recursively | grep -i gedit | grep -v history | \
        grep -v docinfo | \
        grep -v virtual-root | grep -v state.window > /tmp/gedit.gsettings.root
    diff /tmp/gedit.gsettings.root /tmp/gedit.gsettings | grep '>' > /tmp/gedit.gsettings.diff
    sed -i 's/>/gsettings set/g; s/uint32 //g' /tmp/gedit.gsettings.diff
    chmod +x /tmp/gedit.gsettings.diff
    bash -x /tmp/gedit.gsettings.diff  # Display override setting to terminal
    nohup gedit -g 1300x840+1+1220 $@ &>/dev/null &
#              Set the X geometry window size (WIDTHxHEIGHT+X+Y).

}

FUNC=$(declare -f sudoFunc)
sudo -H bash -c "$FUNC; sudoFunc $*;"

exit 0
  • 您不需要使用来调用脚本,sudo而是使用sgedit /path/to/root-owned-file
  • 命令提示符立即返回,并gedit打开单独的 GUI 窗口
  • 将几何形状更改1300x840+1+1220为显示器设置。单个“常规”显示器将类似于700x400+0+0

相关内容