Когда я открываю файл с root gedit, я хочу иметь те же настройки, что и мой обычный gedit. Так что тема, настройки и дополнения.
Могу ли я настроить символические ссылки в нужном месте, чтобы добиться этого?
решение1
Я думаю, что это совершенно невозможно, поскольку gedit управляет своими настройками через gconf, и для их синхронизации потребуется запустить gnome-settings-deamon от имени root.
решение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
сохранить право собственности на файл при получении прав root. - Запрашивает пароль, если истекло время последнего sudo.
- Получает настройки gedit для sudo
- Сравнивает различия между настройками пользователя и sudo gedit
- Запускается
gsettings set
только на основе различий (сокращает 174set
команды до дюжины или меньше). В следующий раз, возможно, будет запущено только одно или два изменения, но часто и ни одного. - Вызывает 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
.