왜 suk로 gksu / gksudo 또는 그래픽 응용 프로그램을 시작하여 Wayland에서 작동하지 않습니까?


44

우분투 17.10을 설치했습니다. 이제 문제가 있습니다 gksu.

$ gksu -dg synaptic
No ask_pass set, using default!
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
STARTUP_ID: gksu/synaptic/8760-0-alex-XPS-15-9530_TIME4974977
cmd[0]: /usr/bin/sudo
cmd[1]: -H
cmd[2]: -S
cmd[3]: -p
cmd[4]: GNOME_SUDO_PASS
cmd[5]: -u
cmd[6]: root
cmd[7]: --
cmd[8]: synaptic
buffer: -GNOME_SUDO_PASS-
brute force GNOME_SUDO_PASS ended...
Yeah, we're in...
Unable to init server: Could not connect: Connection refused
(synaptic:8767): Gtk-WARNING **: cannot open display: :1
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
xauth_env: (null)
dir: /tmp/libgksu-HgUjgQ

를 사용하지 않으면 -g비밀번호 대화 상자가 비활성화됩니다. 따라서 루트에 대한 tty를 작성하는 데 문제가있는 것 같습니다.

어떤 충고?


1
gksudoWayland 세션 에서 작동하지 않는 경우 Xorg 세션으로 전환하여 시도 할 수 있습니다 .
pomsky 2013 년

2
X 오류가 "디스플레이를 열 수 없습니다 : : 1"인 경우 오류 자체입니다. Wayland는 이런 식으로 설계되었으며 개발자의 견해로는 명령 줄에서 루트로 그래픽 응용 프로그램을 실행해서는 안됩니다. xhost로 해결할 수 있습니다.
Panther

1
gksu -dg synaptic 당신은 어쨌든 그렇게해서는 안됩니다.
Rinzwind

3
@ N0rbert는 17.10 을 언급하는 질문에 17.10 을 더 이상 추가하지 않습니다 . 질문이 해당 릴리스와 관련된 경우 버전 태그가 사용됩니다. 이러한 질문의 대부분은 일반적으로 Wayland, GNOME Shell 등을 사용할 수 있고 과거 및 향후 버전을 포함하는 모든 경우에 적용됩니다.
muru

@ 마루. 16.04 LTS는 현재, 17.04는 EOL에 가깝기 때문에 보통 17.10은 Wayland 및 기본 그놈 셸을 의미하므로 17.10 태그 가 유용하다고 생각합니다. 사용자가 17.10에 문제가 있지만 여기서 답변과 의견이없는 질문을 찾기어렵습니다 . 답변이 필요하지만 요청시 17.10 태그를 추가하는 것을 잊었습니다. 태그 추가를 중단 할 수 있습니다. 영업권이었습니다.
N0rbert

답변:


55

이 답변은 Wayland를 사용하는 Ubuntu 버전에만 해당됩니다. 17.10은 기본적으로 Wayland를 사용하는 첫 번째 릴리스입니다.

버그가 아닌 기능입니다! 터미널에서 루트로 그래픽 응용 프로그램을 시작할 수없는 것은 Wayland의 디자인 기능입니다.

주요 토론은 물론 Fedora 사이트에서 진행됩니다. 참조 페도라 버그 # 1274451그래픽 응용 프로그램은 페도라 질문에 (예를 들어 gedit를, beesu, gparted를, 노틸러스) WAYLAND에서 루트로 실행할 수 없습니다 . 그러나 우분투 사이트에 대한 토론도 있습니다 ( 우분투 데브는 17.10-OMG! 우분투에서 기본적으로 Wayland 사용에 대해 불확실합니다 ).

우분투 버그 보고서 : Wayland 세션에서 pkexec 응용 프로그램을 시작할 수 없습니다

잠재적 해결 방법 -그래픽 편집기 (예 : gedit)를 사용하여 시스템 파일을 편집하는 경우 nanoor vim또는 같은 명령 줄 도구를 사용하십시오 emacs. nano일반적으로 새로운 사용자에게는 더 쉽고, vim더 강력하고 더 많은 기능 있습니다. 이 Vim Tutorial 또는 이와 유사한 것을 참조하십시오 .

어쨌든 루트로 그래픽 앱 을 실제로 실행 하거나 실행 해야하는 경우 xhost먼저 Xserver로 대체되도록 설정하십시오 .

권한을 설정하려면 다음을 실행하십시오.

xhost si:localuser:root 

완료되면 권한을 제거하려면

xhost -si:localuser:root 

이 시냅틱 버그 보고서에 따라 그래픽 / 데스크톱 옵션을 추가 할 수 있습니다.

pkexec'ed 응용 프로그램은 xhost +si:localuser:root다음과 같이 XDG 자동 시작에 배치되어 치유 될 수 있습니다 (N0rbert 's idea).

cat <<EOF | sudo tee /etc/xdg/autostart/xhost.desktop
[Desktop Entry]
Name=xhost
Comment=Fix graphical root applications
Exec="xhost +si:localuser:root"
Terminal=false
Type=Application
EOF

이 xhost 명령을 .bashrc에 추가 할 수는 있지만 한 쌍의 별칭을 권장합니다.

alias gsuon='xhost si:localuser:root'

alias gsuoff='xhost -si:localuser:root'

원하는대로 별칭의 이름을 지정할 수 있습니다.

자세한 내용은 다음을 참조하십시오.


Xorg로 다시 전환

어떤 이유로 든 Xorg를 선호하는 경우 로그인시 Xorg에서 실행하도록 선택할 수 있습니다

Ubuntu 17.10에서 Wayland에서 Xorg로 어떻게 전환합니까?를 참조하십시오 .


이 해결 방법이 Mir 에서도 작동합니까 ?
Eliah Kagan

나는 MIR에 대해 모른다.
Panther

1
또는 그냥xhost +local:
chaskes

18
"버그가 아닌 기능입니다!"... 한숨. 이런 것들이 제 친구와 동료들이 리눅스로 전환하도록 설득 할 수없는 이유입니다. VIM과 Nano를 사용하는 것은 GEdit의 대안이 아닙니다. Gedit은 메모장처럼 작동하지만 다른 사람들에게는 CRTL 코드를 배워야합니다. 예를 들어 "저장"대신 "쓰기"와 같은 용어를 사용하여 Nano를 사용하십시오.
JHBonarius

9
이것은 또한 갈라진 부분을 완전히 깨뜨립니다. 이것은 접근해야 할 중요한 일입니다. "어리석은 사람들이 어리석은 일을하는 것을 막으려 고하지 마십시오. 당신은 영리한 사람들이 영리한 일을하는 것을 막는 데 성공할 것입니까?"
Matthew Najmon

21

여기에 이미지 설명을 입력하십시오 솔루션

Wayland에서는 높은 권한 (sudo -H, gksu ...)으로 GUI 응용 프로그램을 실행하기가 어려운 경우가 많습니다. 명령 행 도구를 사용하여 이러한 작업을 수행하는 것이 좋습니다.

그러나 GUI 도구가있는 경우 잘 작동하고 높은 권한이 필요한 해결 방법이 있습니다. (나는 Synaptic Package Manager synaptic와 파티션 도구 Gparted와 같은 두 가지 표준 도구를 gparted사용합니다. MakeUSB를 사용하여 USB 부팅 드라이브를 만들지 mkusb만 그래픽없이 높은 권한이 필요한 부분을 실행할 수 있습니다.)

xhostsudo -H

  1. Wayland에서 로그인 한 사용자가 아닌 다른 사용자가 그래픽 응용 프로그램을 소유 할 수있는 해결 방법이 있습니다.

    xhost +si:localuser:root
    
  2. gksugksudo표준 우분투 함께 번들로 제공되지 않으며, 여기에 작동하지 않습니다,하지만 그들은으로 Xorg에서 작동합니다.

    대신에 당신은 사용할 수 있습니다

    sudo -H
    
  3. 나중에 로그인 한 사용자가 아닌 다른 사용자가 그래픽 응용 프로그램을 소유하지 못하도록하는 것이 좋습니다.

    xhost -si:localuser:root
    

GVFS 관리자 백엔드

Ubuntu 17.10 (gvfs> = 1.29.4)에서는 gvfs admin 백엔드를 사용할 수 있습니다. 전체 경로가 필요합니다.

gedit admin:///path/to/file

이론적으로, (폴킷를 사용)를 GVFS 관리 백엔드 방법은 더 나은과 (보다 안전 xhost하고 xudo -H에 관계없이 사용하는 UI의).

전체 응용 프로그램을 루트로 실행하지 않습니다. 권한 상승은 반드시 필요한 경우에만 발생합니다. 다음 링크 및 링크를 참조하십시오.

노틸러스 관리자

nautilus-admin상승 된 권한을 가진 파일 작업 및 상승 된 권한 을 사용 하는 것도 가능합니다 gedit. 이것은 다음 AskUbuntu 답변에 설명되어 있습니다.

기능을 통해 Wayland 데스크탑에 루트에 대한 임시 액세스 gks

피하십시오 sudo GUI-program. 시스템이 일반 사용자 ID의 구성 파일을의 구성으로 겹쳐 쓰고 일반 사용자 ID root에 맞게 소유권과 권한을 설정하는 소유권과 권한을 설정할 root수 있습니다. sudo -H구성 파일을 root홈 디렉토리 에 쓰는 GUI 응용 프로그램을 실행해야합니다 /root. 예:

sudo -H gedit myfile.txt

그러나 잊어 버릴 위험이 있습니다 -H. 대신 함수를 만들 수 있습니다 (예 :gks

gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }

~/.bashrc별칭 근처에 저장하십시오 . 그럼 당신은 실행할 수 있습니다

gks gedit myfile.txt

당신이 사용하는 방법과 유사한 방법으로 gksudo전에.

테스팅

당신은 어떻게 확인할 수 있습니다 sudo, sudo -H그리고 gks작업 다음 명령을

sudodus@xenial32 ~ $ sudo bash -c "echo ~"
/home/sudodus
sudodus@xenial32 ~ $ sudo -H bash -c "echo ~"
/root
sudodus@xenial32 ~ $ gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }
sudodus@xenial32 ~ $ gks bash -c "echo ~"
localuser:root being added to access control list
/root
localuser:root being removed from access control list
sudodus@xenial32 ~ $ 

그리고 물론

gks gedit myfile.txt

이전 섹션의 예에 따라.

Alt-F2 및 Gnome Shell 메뉴를 통해 작동하는 방법

에 간단한 한 줄 함수를 추가하는 대신 ~/.bashrcbash 없이도 작동하는 시스템을 만들 수 있습니다. 사용하기 편리하지만 설정이 더 복잡합니다. 한 줄 기능은이보다 복잡한 시스템 사용을 방해하므로 대안 중 하나만 설치해야합니다.

세 개의 파일

쉘 스크립트 gks:

#!/bin/bash

xhost +si:localuser:root

if [ $# -eq 0 ]
then
  xterm -T "gks console - enter command and password" \
  -fa default -fs 14 -geometry 60x4 \
  -e bash -c 'echo "gks lets you run command lines with GUI programs
with temporary elevated permissions in Wayland."; \
read -p "Enter command: " cmd; \
cmdfile=$(mktemp); echo "$cmd" > "$cmdfile"; \
sudo -H bash "$cmdfile"; rm "$cmdfile"'
else
 xterm -T "gks console - enter password" -fa default -fs 14 -geometry 60x4 -e sudo -H "$@"
fi 

xhost -si:localuser:root;

데스크탑 파일 gks.desktop:

[Desktop Entry]
Version=1.0
Categories=Application;System;
Type=Application
Name=gks
Description=Run program with temporary elevated permissions in Wayland
Comment=Run program with temporary elevated permissions in Wayland
Exec=gks %f
Icon=/usr/share/icons/gks.svg
Terminal=false
StartupNotify=false
GenericName[en_US.UTF-8]=Run program with temporary elevated permissions in Wayland

아이콘 파일 gks.svg은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

이 링크에서 아이콘 파일 또는 3 개의 파일이 모두 포함 된 타르볼을 다운로드 할 수 있습니다.

wiki.ubuntu.com/Wayland/gks

[추출 또는 복사 및 붙여 넣기] 파일을 다음 위치에 복사하십시오.

sudo cp gks /usr/bin
sudo cp gks.desktop /usr/share/applications/
sudo cp gks.svg /usr/share/icons

로그 아웃 / 로그인 또는 재부팅하면 바탕 화면 아이콘이 작동해야합니다. 함수가있는 간단한 솔루션과 같은 터미널 창에서 작동합니다.

Alt F2 상자:

여기에 이미지 설명을 입력하십시오

그놈 쉘 메뉴 :

여기에 이미지 설명을 입력하십시오

gks 콘솔 및 gparted :

여기에 이미지 설명을 입력하십시오

사용자 정의 스크립트 및 데스크탑 파일

높은 권한이 필요한 GUI 응용 프로그램이 거의없는 경우 사용자 지정 스크립트와 데스크톱 파일을 만들 수 있으며 명령 (응용 프로그램 이름)을 입력하지 않아도됩니다. 암호 만 입력하면 이전 버전의 Ubuntu와 비교하여 어렵지 않습니다 (어쨌든 암호를 입력해야합니다).

xlogo프로그램 패키지와 함께 제공 되는 간단한 GUI 프로그램의 예 x11-apps:

쉘 스크립트 gkslogo(와 비교하여 단순화 됨 gks)

#!/bin/bash

xhost +si:localuser:root

xterm -T "gks console - enter password" -fa default -fs 14 -geometry 60x4 -e sudo -H xlogo

xhost -si:localuser:root;

데스크탑 파일 gkslogo.desktop:

[Desktop Entry]
Version=1.0
Categories=Application;System;
Type=Application
Name=gkslogo
Description=Run program with temporary elevated permissions in Wayland
Comment=Run program with temporary elevated permissions in Wayland
Exec=gkslogo
Icon=/usr/share/icons/gks.svg
Terminal=false
StartupNotify=false
GenericName[en_US.UTF-8]=Run program with temporary elevated permissions in Wayland

게으르고 같은 아이콘 파일을 사용했습니다. gks.svg

[복사하여 붙여 넣기] 파일을 다음 위치에 복사하십시오.

sudo cp gkslogo /usr/bin
sudo cp gkslogo.desktop /usr/share/applications/

gks [logo] 콘솔 및 xlogo :

여기에 이미지 설명을 입력하십시오


"기능 gks를 통한 Wayland 데스크탑에 대한 루트의 임시 액세스" /etc/xdg/autostart/xhost.destop는 원래 환경을 복원하여 종료되므로 더 안전한 방법 입니까 (예 : 제안 된 것과 같은 파일을 추가하는 것보다 )? 그리고 우리는 안전하게 대체 할 수 sudo -Hgksu등의 .desktop 파일에 있으므로 사용 인서트로 별칭에?
Sadi

1
예, 필요한 경우에만 데스크톱에 대한 루트 액세스를 허용하는 것이 더 안전하다고 생각합니다. 그리고 네, 당신은 대체 할 수 sudo -Hgksu기능에, 그것은 당신의 애플리케이션에 더 잘 작동 할 수있다.
sudodus

1
철저한 답변을 얻으려면 +1하십시오. gks약어 와 유사하게 및에 gsu대한 정책 키트 (새로운 미래 16.04) 를 사용하도록 설정 했습니다 . 18.04가 나올 때로 시작하는 패키지에서 절대로 설치하지 않을 래퍼 스크립트의 이름을 지정합니다 . geditnautilusxhost +si...gksu18.04
WinEunuuchs2Unix

2
"Wayland는 GUI 응용 프로그램에서 높은 권한 (sudo -H, gksu ...)을 허용하지 않도록 설계되었습니다." -거짓. Wayland는 루트 응용 프로그램을 훌륭하게 허용합니다. 당신은 이것을 실행하여 이것을 볼 수 있습니다 sudo -E gedit. 현재 gdmXwayland X11 호환 서버가 XAUTHORITY를 지원하지 않도록 구성 하는 버그가 있습니다. XAUTHORITY는 루트로 실행되는 X11 응용 프로그램이 작동하는 데 필요합니다. 루트로 실행되는 기본 웨이 랜드 응용 프로그램은 정상적으로 작동합니다.
psusi

1
@psusi, Wayland의 디자인과 의도에 대한 진술을 피하기 위해 답변을 수정했습니다.
sudodus

6

루트 권한을 부여하기 전에 웨이 랜드가 실제로 실행 중인지 확인하는 것이 좋습니다.

if [ $XDG_SESSION_TYPE = "wayland" ]; then
    xhost +si:localuser:root
fi

5

당신이 사용하는 경우 우분투 17.04 이상 또는, 사용하는 것이 좋습니다 GVFS 관리 백엔드 . 텍스트 편집기 또는 파일 앱 과 같은 앱에서 열려는 전체 파일 경로 앞에 admin : // 을 추가하기 만하면 됩니다 .

예를 들어 부팅 설정을 변경하려면

admin:///etc/default/grub

이 방법은 PolicyKit을 사용하며 Ubuntu 17.10의 Wayland 기본값과 함께 작동하지만 GUI 응용 프로그램의 sudo 및 gksu는 작동하지 않습니다.


1
감사. 나에게 이것은 gedit ( 가장 간단하게 사용 될 때 이상한 행동 제외)에서 가장 효과적이며 노틸러스 (거의 쓸모 없음) gedit admin:와 매우 이상하게 작용 하고 시냅스로 완전히 실패했습니다 . 어떤 아이디어?
Sadi

시냅스로는 작동하지 않습니다. 그래도 노틸러스에서는 제대로 작동하지만 다음과 같은 파일이 아닌 디렉토리를 선택해야합니다.admin:///etc/
Jeremy Bicha

일종의 노틸러스 에서 작동 하지만 디렉토리를 직접
열고이

@Sadi 나는 "이것과 저것"이 무엇인지 전혀 모른다. 제대로 작동하지 않으면 버그를 신고 할 수 있습니다.
제레미 비카

3

su-to-root 및 pkexec를 사용하는 응용 프로그램의 경우 사용자 책임으로이 코드를 추가 할 수 있습니다 /etc/xdg/autostart( 런치 패드의 주석 참조 ).

cat <<EOF | sudo tee /etc/xdg/autostart/xhost.desktop
[Desktop Entry]
Name=xhost
Comment=Fix graphical root applications
Exec="xhost +si:localuser:root"
Terminal=false
Type=Application
EOF

다른 루트 응용 프로그램도 Wayland에서 손상되었습니다 ( 버그 1713313버그 1713311 참조 ).


영구적 인 솔루션을 원하지 않으면 @ravery의 방법을 사용할 수 있습니다.

xhost +si:localuser:root권한있는 응용 프로그램을 시작하기 전에 터미널에 입력 하십시오


1

애플리케이션이 Wayland API를 지원하는 경우 sudo -EH application명령을 사용하여 루트로 실행할 수 있습니다 .

-E 스위치는 sudo에게 응용 프로그램을 방해하는 데 필요한 환경 변수 (WAYLAND_SOCKET 및 XDG_RUNTIME_DIR)를 보존하도록 지시합니다. 다른 답변에서 제안 된 불쾌한 xhost 핵보다이 옵션을 사용하는 것이 좋습니다. xhost를 사용하면 Wayland (공유 클립 보드, 키 로깅 등)를 사용하는 것보다 덜 안전한 X 래퍼에서 응용 프로그램을 실행할 수 있습니다. sudo -EH 트릭은 glanded와 같이 wayland 용으로 다시 작성되지 않았지만 gedit 등을 사용하는 응용 프로그램에서는 작동하지 않습니다.


0

실제로 다음 코드는 거의 작동합니다.

#! /bin/bash
set -e 
if [ -z "$1" ] ; then
    echo "Application is not specified" ;  exit
fi 
if [ $XDG_SESSION_TYPE = "wayland" ]; then
    if [[ -t 1 ]]; then
       xhost +si:localuser:root
       sudo -u root "$@"
       xhost  -  
       exit 0
    fi 
fi
gksu "$@"

(배쉬 코딩의 순진한 스타일에 대해 실례합니다. 나는이 주제에 대한 일종의 초보자입니다). 마지막 선택이 터미널이 아닌 경우 Alt-F2에서 T가 안정적으로 작동하지 않습니다. 이 경우 비밀번호 대화 상자에 포커스를 설정할 수 없습니다. 그놈 메뉴에서 작동하는 것처럼 보입니다. 어쨌든 <1. 100 % 솔루션이 아닙니다. 2. 우분투 건축가는 우리가 어떤 해결 방법도 찾지 않아야한다고 생각하는 것 같습니다.


1
나는 당신이 원하는 생각 "$@"(대신을 "$1" "$2" ...).
muru

네 물론입니다 :-) 이것들은 단지 내 실험의 흔적입니다
Alex Chapiro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.