当使用sudo
权力并调用gedit
顶级菜单时File Edit View Search Tools Documents Help
缺少。
如果我创建用户 ID根并登录一次并调用gedit
它将创建必要的用户配置文件可能解决这个问题?
sudo
每当我使用,gksu
或者pkexec
以具有提升权限的普通用户身份使用 时,这是否也会使恼人的错误消息消失gedit
?
Nautilus 和其他 Gnome 衍生的 Ubuntu 应用程序还有其他好处吗?
笔记:通过sudo
谷歌搜索,您可以获得pkexec gedit
3.5k 次、gksu gedit
40k 次或sudo gedit
500k 次搜索结果。我是少数使用第一种方法的人,但我相信它将成为 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