ルート gedit でファイルを開くときは、通常の gedit と同じ設定にしたいと思います。つまり、テーマ、設定、アドオンです。
これを実現するために、適切な場所にいくつかのシンボリック リンクを設定できますか?
答え1
gedit は gconf を通じて設定を管理しており、これを同期するには root で gnome-settings-deemon を実行する必要があるため、これはまったく不可能だと思います。
答え2
通常、通常の gedit 設定を root gedit ユーザー設定と同期することはありません。
ルートには独自の設定があり、コンピュータ ユーザーにも独自の設定があります。この 2 つは同じではありません。これは設計によるものです。
ルートとして操作する場合はルート ユーザーのプロファイルを使用し、自分自身として操作する場合は個人プロファイルを使用します。それぞれに、その特定のアカウントに関連付けられた独自の権限と所有権があります。これらは同じになるように意図されていません。
答え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
コマンドが 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
。