Waylandでgksu / gksudoまたはsudoを使用してグラフィカルアプリケーションを起動しないのはなぜですか?


44

Ubuntu 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、パスワードダイアログは無効になります。したがって、rootのttyの作成に問題があるように見えます。

何かアドバイス?


1
gksudoWaylandセッションでは動作しません。Xorgセッションに切り替えて試してください。
pomsky

2
Xエラーが「ディスプレイを開けません::1」の場合、エラー自体。Waylandはこのように設計されており、開発者の意見では、コマンドラインからrootとしてグラフィカルアプリケーションを実行しないでください。xhostで回避できます。
パンサー

1
gksu -dg synaptic とにかくそうするべきではありません。
リンツウィンド

3
@ N0rbertは、17.10に言及する質問への17.10の追加を停止します。質問がそのリリースに固有のものである場合、バージョンタグが使用されます。これらの質問のほとんどは、WaylandやGNOME Shellなどが利用できる場所であればどこでも一般的に適用され、過去および将来のバージョンも含まれます。
ムル

@maru。16.04 LTSは現在、17.04はEOLに近いため、通常の17.10はWaylandおよびデフォルトのGNOME Shellを意味するため、17.10タグが便利だと思います。ユーザーが17.10で問題を抱えているが、ここには回答やコメントがない質問を見つけることは困難です。回答が必要ですが、尋ねられたときに17.10タグを追加するのを忘れていました。タグの追加を停止できます。それは善意でした。
N0rbert

回答:


55

この回答は、Waylandを使用するUbuntuのバージョンに固有のものであることに注意してください。デフォルトでは、Waylandを使用する最初のリリースは17.10です。

これはバグではなく機能です!端末からrootとしてグラフィカルアプリケーションを起動できないのは、Waylandの設計機能です。

主な議論はもちろんFedoraサイトです。Fedoraのバグ#1274451を参照してください。AskFedoraでは、ウェイランドのルートとしてグラフィカルアプリケーションを実行できません(gedit、beesu、gparted、nautilusなど)。しかし、Ubuntuサイトでも議論があります(Ubuntu Devsは、Waylandをデフォルトで17.10-OMG!Ubuntuで使用することについて不確かです)。

Ubuntuバグレポート:Waylandセッションでpkexecされたアプリケーションを起動できない

周りの潜在的な仕事 -あなたは(などのgeditなど)のグラフィカルエディタでシステムファイルを編集する場合は、次のようなコマンドラインツールを使用するnanoか、vimまたはemacsnano通常、新規ユーザーにとってより簡単で、vimより強力で、より多くの機能があります。このVimチュートリアルなどを参照してください。

とにかく、本当にグラフィカルアプリをrootとして実行したい、または実行する必要がある場合は、xhost最初に設定してXserverにフォールバックします。

アクセス許可を設定するには:

xhost si:localuser:root 

完了したら、権限を削除します

xhost -si:localuser:root 

このシナプスバグレポートに従って、これを行うためのグラフィカル/デスクトップオプションを追加できます

pkexecで処理されたアプリケーションはxhost +si:localuser:root、次のようにXDG自動起動に配置することで修復できます(N0rbertのアイデア)。

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でも機能しますか?
エリアカガン

MIRについては知りませんが、そうかもしれません。
パンサー

1
または単にxhost +local:
追跡

18
「これはバグではなく機能です!」...ため息。このようなことは、まさに友人や同僚にLinuxに切り替えるよう説得できない理由です。VIMとNanoを使用することは、GEditに代わるものではありません。Geditはメモ帳のように機能しますが、他の人のためにCRTLコードを学ぶ必要があります。そして、例えば「保存」の代わりに「書き出す」のような用語を使用してナノを取ります。非常にユーザーフレンドリーではありません。
-JHBonarius

9
これはまた、gpartedを完全に破壊します。これは、アクセスできる重要なものです。「愚かな人が愚かなことをするのを防ごうとしないでください。賢い人が賢いことをするのを防ぐことに成功するだけです」。
マシューナジモン

21

ここに画像の説明を入力してください 解決策

Waylandでは、権限を高めた(sudo -H、gksu ...)GUIアプリケーションプログラムを実行するのが難しいことがよくあります。コマンドラインツールを使用してこのようなタスクを実行することをお勧めします。

ただし、GUIツールを使用している場合は、回避策があり、うまく機能し、昇格したアクセス許可が必要です。(このような2つの標準ツールを使用しsynapticます。SynapticPackage Manager とパーティショニングツールGpartedです。MakeUSB gpartedを使用してUSBブートドライブも作成しますが、mkusbグラフィックなしで昇格されたアクセス許可が必要な部分を実行できます。)

xhost そして sudo -H

  1. Waylandでログインしているユーザー以外のユーザーが所有するグラフィカルアプリケーションプログラムを許可する回避策があります。

    xhost +si:localuser:root
    
  2. gksuまたgksudo、標準のUbuntuにバンドルされておらず、ここでは動作しませんが、Xorgでは動作します。

    代わりに使用できます

    sudo -H
    
  3. 後でログインしているユーザー以外のユーザーが所有するグラフィカルアプリケーションプログラムを防止することをお勧めします。

    xhost -si:localuser:root
    

gvfs adminバックエンド

Ubuntu 17.10(gvfs> = 1.29.4)では、gvfs adminバックエンドを使用できます。完全なパスが必要なことに注意してください。

gedit admin:///path/to/file

理論的には、(polkitを使用しています)GVFS管理バックエンドの方法が優れていると(より安全xhostxudo -H関係なく、あなたが使用してUIの、)。

アプリケーション全体をルートとして実行することはありません。特権の昇格は、厳密に必要な場合にのみ発生します。次のリンクとそこからのリンクを参照してください。

nautilus-admin

またnautilus-admin、昇格されたアクセス許可でファイル操作に使用geditしたり、昇格されたアクセス許可で使用することもできます。これは、次のAskUbuntuの回答で説明されています。

関数を介したWaylandデスクトップへのルートの一時アクセス gks

避けてくださいsudo GUI-program。これにより、システムが通常のユーザーIDの構成ファイルをの構成で上書きし、通常のユーザーID rootに合わせrootてロックアウトするように所有権と許可を設定する可能性があります。GUIアプリケーションを実行する必要があります。GUIアプリケーションsudo -Hは、構成ファイルをrootホームディレクトリに書き込みます/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以前の使用方法と同様の方法で。

テスト中

あなたはどのように確認することができsudosudo -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メニューを介して機能する方法

に単純な1行関数を追加する代わりに、~/.bashrcbashなしでも機能するシステムを作成できます。使いやすいかもしれませんが、設定はより複雑です。1行機能はこのより複雑なシステムの使用を妨げるため、代替の1つのみをインストールする必要があることに注意してください。

3つのファイル

シェルスクリプト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つのファイルすべてを含むtarballをダウンロードできます。

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 ボックス:

ここに画像の説明を入力してください

Gnome Shellメニュー:

ここに画像の説明を入力してください

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ファイル、に使用挿入すると、エイリアスに?
サディ

1
はい、必要な場合にのみデスクトップへのルートアクセスを許可する方が安全だと思います。そして、はい、あなたは置き換えることができsudo -Hgksu機能して、それはあなたのアプリケーションのためのより良い動作する可能性があります。
sudodus

1
非常に徹底的な答えのために+1。あなたに似たgks略語私はセットアップ持っていたgsuポリシーキット(のための新たな未来を使用する16.04ために)geditnautilus。18.04が出たら、xhost +si...ラッパースクリプトに名前を付けるだけで、gksuそれ以降は決してパッケージからインストールしないと思います18.04
WinEunuuchs2Unix

2
「Waylandは、GUIアプリケーションプログラムでの昇格(sudo -H、gksu ...)許可を許可しないように設計されています。」-偽。Waylandでは、ルートアプリケーションを問題なく使用できます。これは、を実行して確認できますsudo -E gedit。バグは現在ありgdm、それが仕事にrootとして実行されているX11アプリケーションのために必要とされるXAUTHORITYをサポートしないようにXwayland X11互換サーバを設定場所。ルートとして実行されているネイティブウェイランドアプリケーションは問題なく動作します。
-psusi

1
@psusi、私は答えを修正して、Waylandの設計と意図に関する記述を避けました。
sudodus

6

ルート権限を付与する前に、ウェイランドが実際に最初に実行されているかどうかを確認する

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

5

あなたが使用している場合のUbuntu 17.04以降を、使用することをお勧めしますGVFS管理バックエンドを。単純に追加し、管理を://あなたのようなアプリで開きたいの完全なファイルパスの前に、テキストエディタファイルのアプリ

たとえば、起動設定を変更するには、開く

admin:///etc/default/grub

このメソッドはPolicyKitを使用し、Ubuntu 17.10のWaylandのデフォルトで引き続き動作しますが、GUIアプリのsudoおよびgksuは動作しません。


1
ありがとう。私にとっては、これはgedit(単にとして使用されたときの奇妙な動作を除く)で最もよく機能しgedit admin:、非常に奇妙にnautilus(ほとんど役に立たない)で、synapticで完全に失敗しました。何か案は?
サディ

シナプスでは機能しません。これは、オウムガイかかわらずに罰金を動作するはずですが、あなたがディレクトリではないようなファイル選択する必要があるadmin:///etc/
ジェレミー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コマンドを使用してrootとして実行できます。

-Eスイッチは、sudoに、ウェイランドアプリケーションに必要な環境変数(およびWAYLAND_SOCKETおよびXDG_RUNTIME_DIR)を保存するように指示します。他の回答で提案されている厄介なxhostハックよりも、このオプションを使用することを常にお勧めします。xhostを使用すると、アプリケーションは、Wayland(共有クリップボード、キーロギングなど)を使用するよりも安全性の低いXラッパーの下で実行できます。sudo -EHトリックは、たとえばgpartedのようにウェイランド用に書き直されていないアプリケーションでは機能しませんが、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 "$@"

(bashコーディングの素朴なスタイルを許してください。私はこのテーマの初心者です。)最後の選択が端末ではなかった場合、TはAlt-F2から安定して動作しません。この場合、パスワードダイアログにフォーカスを設定することはできません。Gnomeメニューから機能するようです。とにかく<1.それは100%のソリューションではありません。2. Ubuntuアーキテクトは、回避策を検索することは想定されていないように思えます。


1
"$@"(の代わりに"$1" "$2" ...)欲しいと思います。
ムル

はい、もちろんです:-)これらは私の実験の痕跡です
アレックスシャピロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.