我使用了一个名为的脚本sgedit
,该脚本继承了字体,标签和扩展名的用户首选项。它用于sudo -H gedit
代替gksu gedit
GUI环境中的稳定性。提示输入密码。
有sudo
继承你的用户帐户gedit
设置
在此示例中,字体名称,字体大小,制表位,将制表符转换为空格,80列突出显示和右侧缩略图滑块的用户设置已被继承sudo
。
常规情况下,sudo -H gedit
您无法进行或保存这些配置设置。使用下面的脚本sgedit
,设置将从您的用户帐户继承。
该脚本还解决了“ gksu
错误且默认情况下未安装”和“ pkexec
难以设置”的问题。
背景
多年来,我一直被同一个问题困扰。这个周末的项目是编写sgedit
脚本:
- 致电使用
sgedit filename1 filename2...
- 获取用户的制表符停靠点,字体,换行符等的gedit设置。
- 提升为
sudo -H
保留文件所有权,同时获得root权限。
- 如果最后一个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 &
}
FUNC=$(declare -f sudoFunc)
sudo -H bash -c "$FUNC; sudoFunc $*;"
家政
将上面的bash脚本复制到一个名为的新文件中sgedit
。我建议将其放在您的$HOME/bin
目录中/home/YOURNAME/bin
。您可能必须先创建目录。
使用以下命令将文件标记为可执行文件:
chmod a+x ~/sgedit
注意~
是的快捷方式/home/YOURNAME
。
pkexec
为你工作,而不是gksu
?