Bashスクリプトsgedit

Bashスクリプトsgedit

ルート gedit でファイルを開くときは、通常の gedit と同じ設定にしたいと思います。つまり、テーマ、設定、アドオンです。

これを実現するために、適切な場所にいくつかのシンボリック リンクを設定できますか?

答え1

gedit は gconf を通じて設定を管理しており、これを同期するには root で gnome-settings-deemon を実行する必要があるため、これはまったく不可能だと思います。

答え2

通常、通常の gedit 設定を root gedit ユーザー設定と同期することはありません。

ルートには独自の設定があり、コンピュータ ユーザーにも独自の設定があります。この 2 つは同じではありません。これは設計によるものです。

ルートとして操作する場合はルート ユーザーのプロファイルを使用し、自分自身として操作する場合は個人プロファイルを使用します。それぞれに、その特定のアカウントに関連付けられた独自の権限と所有権があります。これらは同じになるように意図されていません。

答え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コマンドが 12 個以下に削減されます。次回の実行時には、おそらく 1 つか 2 つの変更のみが行われ、変更がまったく行われないこともよくあります。
  • ターミナルプロンプトがすぐに再表示されるように、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

Note は~のショートカットです/home/YOURNAME

関連情報