web-dev-qa-db-ja.com

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

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の作成に問題があるように見えます。

何かアドバイス?

43
Alex Chapiro

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

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

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

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

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

とにかくグラフィカルアプリをルートとして実行するが本当に必要な場合、または最初にxhostを設定すると、Xserverへのフォールバックが強制されます。

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

xhost si:localuser:root 

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

xhost -si:localuser:root 

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

pkexecされたアプリケーションは、次のようにXDG自動起動に配置されたxhost +si:localuser:rootで修復できます(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に追加できますが、2つのエイリアスをお勧めします

alias gsuon='xhost si:localuser:root'

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

エイリアスには任意の名前を付けることができます。

詳細については、以下を参照してください。


Xorgに戻る

何らかの理由でXorgを好む場合は、ログイン時にXorgで実行することを選択できます。

buntu 17.10でWaylandからXorgに切り替える方法 を参照してください。

55
Panther

enter image description here ソリューション

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

ただし、GUIツールを使用している場合は、回避策があります。GUIツールを使用するとうまく機能し、昇格したアクセス許可が必要になります。 (私はそのような2つの標準ツールを使用します:Synaptic Package Manager、synapticおよびパーティショニングツールGparted、gparted。MakeUSBを使用して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

理論的には、使用するUIに関係なく、gvfs adminバックエンドメソッド(polkitを使用)は(xhostおよびxudo -Hよりも)より安全で安全です。

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

nautilus-admin

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

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

Sudo GUI-programは避けてください。システムは、rootの構成で通常のユーザーIDの構成ファイルを上書きし、rootに合うように所有権と許可を設定し、通常のユーザーIDをロックアウトする可能性があります。 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メニューを介して機能する方法

~/.bashrcに単純な1行の関数を追加する代わりに、bashなしでも機能するシステムを作成できます。使いやすいかもしれませんが、設定はより複雑です。 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は次のようになります。

enter image description here

このリンクからアイコンファイルまたは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ボックス:

enter image description here

Gnome Shellメニュー:

enter image description here

gksコンソールとgparted:

enter image description here

カスタムスクリプトとデスクトップファイル

昇格されたアクセス許可が必要なGUIアプリケーションが数個しかない場合は、それらのカスタムスクリプトとデスクトップファイルを作成し、コマンド(アプリケーション名)の入力を避けることができます。パスワードを入力するだけです。これは、以前のバージョンのUbuntuと比較して難しくありません(とにかくパスワードを入力する必要があります)。

プログラムパッケージx11-appsに付属するシンプルなGUIプログラムxlogoの例:

シェルスクリプトgkslogogksと比較して簡略化)、

#!/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:

enter image description here

21
sudodus

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

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

buntu 17.04以上を使用している場合、gvfs admin backendを使用することをお勧めします。 Text Editorなどのアプリで開く完全なファイルパスの前にadmin://を追加するだけですファイルアプリ

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

admin:///etc/default/grub

このメソッドはPolicyKitを使用し、Ubuntu 17.10のWaylandのデフォルトで動作しますが、GUIアプリのSudoとgksuは動作しません。

5
Jeremy Bicha

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で壊れています( bug 171331 および bug 1713311 を参照)。


永続的な解決策が必要ない場合は、@ raveryの方法を使用できます。

特権アプリケーションを起動する前に、ターミナルでxhost +si:localuser:rootと入力するだけです

3
N0rbert

アプリケーションがWayland APIをサポートしている場合、Sudo -EH applicationコマンドを使用してrootとして実行できます。

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

1
ZAB

実際、次のコードはほとんど動作します:

#! /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アーキテクトは、私たちが回避策を探すべきではないと考えているようです。

0
Alex Chapiro