当我使用 root gedit 打开文件时,我希望拥有与普通 gedit 相同的设置。主题、首选项和插件。
我可以在正确的位置设置一些符号链接来实现这一点吗?
答案1
我认为这是不可能的,因为 gedit 通过 gconf 管理其设置,而要同步这些设置,它需要为 root 运行 gnome-settings-deamon。
答案2
您通常不会将普通 gedit 设置与 root gedit 用户设置同步。
Root 有自己的设置,计算机用户也有自己的设置。两者并不相同。这是设计使然。
当您以 root 身份操作时,您使用的是 root 用户的配置文件,而当您以自己的身份操作时,您使用的是您的个人资料。每个配置文件都有自己的权限和所有权,与特定帐户绑定。它们并不相同。
答案3
继承sudo
您的用户帐户gedit
设置
在此示例中,字体名称、字体大小、制表位、将制表符转换为空格、80 列突出显示和右侧缩略图滑块栏的用户设置都已被继承sudo
。
使用常规方式时,sudo -H gedit
您无法进行或保存这些配置设置。使用以下脚本,sgedit
设置将从您的用户帐户继承。
该脚本还解决了“gksu
很糟糕并且默认未安装”和“pkexec
难以设置”的问题。
背景
多年来,这个问题一直困扰着我。这个周末的项目是编写脚本sgedit
:
- 调用方式
sgedit filename1 filename2...
- 获取用户的制表位、字体、换行等 gedit 设置。
- 提升至
sudo -H
获取根权限的同时保留文件所有权。 - 如果最后的 sudo 超时则请求密码。
- 获取 sudo 的 gedit 设置
- 比较用户和 sudo gedit 设置之间的差异
gsettings set
仅在差异处运行(将 174 个set
命令减少到十几个或更少。下次运行时可能只有一两个更改,但通常没有。- 调用 gedit 作为后台任务,以便终端提示符立即重新出现。
Bash 脚本sgedit
#!/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 $@ &>/dev/null &
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
家政
将上面的 bash 脚本复制到名为 的新文件中sgedit
。我建议将其放在您的$HOME/bin
目录中,即/home/YOURNAME/bin
。您可能必须先创建目录。
使用以下方法将文件标记为可执行文件:
chmod a+x ~/sgedit
注意~
是 的快捷方式/home/YOURNAME
。