명령줄에서 gparted를 열 수 없는 이유는 무엇입니까?

명령줄에서 gparted를 열 수 없는 이유는 무엇입니까?

명령줄에서 gparted를 시작할 수 없는 것 같습니다. 저는 Trisquel 8(Ubuntu 16.04 기반)과 LXDE를 사용하고 있습니다. 열려고 하면 다음 오류가 발생하고 아무 일도 일어나지 않습니다.

$ sudo gparted

(gpartedbin:7820): Gtk-WARNING **: cannot open display: 

그러나 그래픽 응용 프로그램 메뉴에서는 제대로 열리는 것 같습니다.

온라인으로 검색한 결과 다음과 같은 제안이 있었습니다.

xhost +localhost

그러나 이것은 도움이 되지 않았습니다. 분명히 Wayland에서 루트로 명령줄에서 gtk 응용 프로그램을 여는 데 문제가 있는 것 같습니다. 하지만 X11을 사용하고 있습니다. 이는 로컬 랩톱에서만 가능합니다. SSH나 원격 시스템은 관련되지 않습니다.

과거에는 항상 명령줄에서 gparted를 열 수 있었기 때문에 이것이 이상해 보입니다. 또한 gparted를 다시 설치해 보았지만 도움이 되지 않는 것 같습니다.

고쳐 쓰다:

meuh가 댓글에서 제안한 대로 DISPLAY=:0/etc/environment 파일에 추가하여 sudo를 사용할 때 전달해야 합니다. 그러나 여전히 오류가 발생하지만 이제는 변경되었습니다.

$ sudo gparted
No protocol specified

(gpartedbin:5549): Gtk-WARNING **: cannot open display: :0

현재 DISPLAY 변수가 전달되는 것 같지만 "프로토콜 없음" 메시지가 무엇을 의미하는지 잘 모르겠습니다.

답변1

X에 액세스하려면 환경 변수가 필요하며 DISPLAY설정 XAUTHORITY에 따라 sudo가 이를 제거할 수 있습니다. 환경 변수를 검사하여 확인할 수 있습니다 sudo env.

사용자 환경을 보호하기 위해 를 사용할 수 있습니다 sudo -E. 여기에는 HOME사용자 홈페이지에 대한 트랩 설정이 있으며 프로필이 잘못된 파일 권한을 얻을 수 있습니다. 그러나 이를 방지하려면 로 sudo -H설정 하십시오 .HOME/root

gparted로 결합하십시오.

sudo -EH gparted

필수 변수는 다음을 통해서만 설정할 수 있습니다.

sudo env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gparted

에러 메시지:

cannot open display:DISPLAY비어 있거나 존재하지 않음을 나타냅니다 .

no protocol specified설정 되어 DISPLAY유효하지만 XAUTHORITY인증 쿠키가 설정되지 않았거나 쿠키가 유효하지 않음을 나타냅니다. 또는 xhost +SI:localuser:root로그아웃할 때까지 X에 대한 루트 임시 액세스를 허용하십시오.


Wayland를 사용하고 액세스할 때도 WAYLAND_DISPLAY마찬가지입니다 XDG_RUNTIME_DIR. Wayland 루트 액세스 문제는 sudo -EH다음을 통해 해결할 수도 있습니다. 자세한 내용과 함정은 다음을 XDG_RUNTIME_DIR참조하세요.Wayland는 그래픽 sudo를 지원합니까?

답변2

이 문제를 해결할 수 있는 kdesudo, gsudo, 및 기타 몇 가지 방법이 있습니다 .sudo

(보안 검토/테스트 없이) 함께 해킹한 내용입니다.

#/bin/bash

inner() {
    su  - "$user" -c "xauth list" |
        grep "$(echo "$display" |
                cut -d ':' -f 2 |
                cut -d '.' -f 1 |
                sed -e s/^/:/ ) " |
        xargs -n 3 xauth add &&
        "$@"
}

if [ "$1" = "---innermode" ]
then
    shift
    user="$1"
    display="$2"
    shift 2
    inner "$@"
else
    self="$0"
    sudo "${self}" ---innermode "$USER" "$DISPLAY" "$@"
fi

관련 정보