배쉬 스크립트sgedit

배쉬 스크립트sgedit

루트 gedit로 파일을 열 때 일반 gedit와 동일한 설정을 갖고 싶습니다. 테마, 환경 설정 및 애드온이 있습니다.

이를 달성하기 위해 올바른 위치에 일부 심볼릭 링크를 설정할 수 있습니까?

답변1

gedit는 gconf를 통해 설정을 관리하고 이를 동기화하려면 루트에서 실행되는 gnome-settings-deamon이 필요하기 때문에 이것이 불가능하다고 생각합니다.

답변2

일반적으로 일반 gedit 설정을 루트 gedit 사용자 설정과 동기화하지 않습니다.

루트에는 자체 설정이 있고 컴퓨터 사용자에게는 자체 설정이 있습니다. 둘은 동일하지 않습니다. 이것은 의도적으로 설계된 것입니다.

루트로 작업할 때는 루트 사용자의 프로필을 사용하고, 자신으로 작업할 때는 개인 프로필을 사용합니다. 각 계정에는 특정 계정과 연결된 고유한 권한과 소유권이 있습니다. 그들은 동일하게 의도되지 않았습니다.

답변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개 이하로 줄입니다. 다음 번에는 한두 가지 변경 사항만 실행되지만 종종 아무 것도 실행되지 않습니다.
  • 터미널 프롬프트가 즉시 다시 나타나도록 gedit를 백그라운드 작업으로 호출합니다.

배쉬 스크립트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.

관련 정보