Bash 脚本sgedit

Bash 脚本sgedit

当我使用 root gedit 打开文件时,我希望拥有与普通 gedit 相同的设置。主题、首选项和插件。

我可以在正确的位置设置一些符号链接来实现这一点吗?

答案1

我认为这是不可能的,因为 gedit 通过 gconf 管理其设置,而要同步这些设置,它需要为 root 运行 gnome-settings-deamon。

答案2

您通常不会将普通 gedit 设置与 root gedit 用户设置同步。

Root 有自己的设置,计算机用户也有自己的设置。两者并不相同。这是设计使然。

当您以 root 身份操作时,您使用的是 root 用户的配置文件,而当您以自己的身份操作时,您使用的是您的个人资料。每个配置文件都有自己的权限和所有权,与特定帐户绑定。它们并不相同。

答案3

继承sudo您的用户帐户gedit设置

sgedit 80 列右滑块.gif

在此示例中,字体名称、字体大小、制表位、将制表符转换为空格、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

相关内容