Waylandはグラフィックスードをサポートしていますか?

Waylandはグラフィックスードをサポートしていますか?

Xデスクトップでは、他のユーザー(ルートを含む)でGUIアプリケーションを使用またはgksudo実行します。sudo somegui私は最近(2018年初め)Waylandデスクトップではこれが不可能であることを最近発見しました。すべてのアプリケーションは現在デスクトップユーザーとして実行する必要があり、そのユーザーに制限された権限があります。

これは(設計上)Waylandの永続的な機能ですか、それともsu型の使用がまだ実装されていない拡張機能ですか?

私は好みや意見ではなく、文書化された説明(ロードマップ、デザインページ...)を探しています。

答え1

これはWaylandの永続的な機能ですか(意図的)

いいえ、これはウェイランド契約とは何の関係もありません。これは実際に環境設定の問題です。

Waylandは名前がWAYLAND_DISPLAYXDG_RUNTIME_DIRただし、ルートにもアクセスできます。 (一部のアプリケーションでは、XDG_SESSION_TYPEどれが値を持つことができるかを検討するwaylandか、x11Xを使用するかWaylandを使用するかを決定します。)

sudoXDG_RUNTIME_DIRとを含むほとんどの環境変数を削除しますWAYLAND_DISPLAY

Waylandアプリケーションをrootとして実行できます。

sudo env XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR WAYLAND_SOCKET=$WAYLAND_SOCKET waylandapplication

または、短く設定して-EHほぼすべての環境変数を保存します(ただしHOMEに設定/root)。これにはDISPLAYXwaylandXAUTHORITYへのアクセスも含まれます。

sudo -EH application

ただし、rootとして実行されているアプリケーションに何かを書き込むと、XDG_RUNTIME_DIRユーザーアプリケーションのファイル権限の問題が発生する可能性があります。

しかし、グラフィカルアプリケーションをrootとして実行する際のセキュリティ問題は、X11よりもWaylandでははるかに少ない。

誤ってX11を使用しないようにするには、次の方法で実行できますDISPLAY

sudo -EH env DISPLAY=  waylandapplication

私は好みや意見ではなく、文書化された説明(ロードマップ、デザインページ...)を探しています。

これウェールランド文書言及しましたが、WAYLAND_DISPLAYそれについて何も見つかりませんでしたXDG_RUNTIME_DIR。しかし、すべてのWaylandシンセサイザー(参照実装を含む)westonXDG_RUNTIME_DIR

別の場所にいる場合、WAYLAND_DISPLAY同じWaylandディスプレイでユーザーのアプリケーションを実行するのに問題はありません。しかし、XDG_RUNTIME_DIR指定済みログインしたユーザーを制限し、ユーザーに関連付けられているソケットを含める必要があります。

$XDG_RUNTIME_DIRは、ユーザー固有の非必須ランタイムファイルと他のファイルオブジェクト(ソケット、名前付きパイプなど)を保存する相対ベースディレクトリを定義します。ディレクトリはユーザーが所有し、そのディレクトリへの読み取りおよび書き込みアクセス権を持つ唯一の人である必要があります。 Unixアクセスモードは0700でなければなりません。

Waylandで他のユーザーやルートを実行する問題は、XDG_RUNTIME_DIRWayland自体ではなく仕様に関連しています。任意のアクセスでカスタムを指定するとXDG_RUNTIME_DIR/tmpしたがって仕様に違反する)、すべてのユーザーがウェイランド表示を使用できるようになります。

今後は必要ありませんが、XDG_RUNTIME_DIR実装によって異なります。Waylandドキュメンタリー第4章:

Wayland 1.15以降、実装では、WAYLAND_DISPLAYをサーバーエンドポイントが受信する絶対パスに設定することで、ファイルシステム上の任意の場所にあるサーバーソケットエンドポイントをオプションでサポートできます。

答え2

egoこのユースケースのために(Alter Ego)を作成しました。 GUIアプリケーションではありませんが、コンソールから他のユーザーとしてGUIアプリケーションを起動でき、xhostとWaylandとPulseAudioソケットの共有を自動的に処理します。https://github.com/intgr/ego

秘密は、Posix ACLを使用して他のユーザーにWayland / PulseAudioソケットへのアクセスを許可し、ターゲットユーザーのアプリケーションがどのように接続するかを知るために環境変数を設定することです。

問題が発生した場合は、GitHubに問題を提出してください。

答え3

かなり簡単な2つの解決策があります。次の例ではシナプティックを起動しますが、他のコマンドも機能します。

  1. SSHを使用してrootにXを渡す(rootログインを有効にするか、/etc/ssh/sshd_configキー認証を設定する必要があるかもしれません):
$ ssh -Y root@:: synaptic
  1. 推奨されるようにsocatとsudoを使用してください。bober の RedHat バグ #1274451。以下の例では、#0を表示し、#1は無料であると仮定しています。
socat UNIX-LISTEN:/tmp/.X11-unix/X1 UNIX-CONNECT:/tmp/.X11-unix/X0 & sudo DISPLAY=:1 synaptic

いずれにしても、解決策はユーザー所有プロセスをX11ソケットに接続してトンネルを提供することだと思います。

答え4

あなたの質問に直接答えることはありませんでしたが、一部の人は同じ問題を抱えてここに来ることができると思いました。

以下はグラフィックアプリケーションです(例:編集者シナプスまたはゴポット) ルートとして渡されるSudoウェイランド会議:

https://gist.github.com/wachambo/bd22e12db2d5a46dc109bd0d553733be

ここからインポート:

#!/usr/bin/env bash

#
# Enable root access to x-windows system.
#
# Motivation: Trying to run a graphical application as root via su, sudo in a 
# Wayland session (e.g. GParted or Gedit), will fail. Apps which use polkit to
# request administrator permissions for just certain operations and only when 
# needed are not affected (they are not started as root right away). 
# [1] https://bugzilla.redhat.com/show_bug.cgi?id=1274451
#
# Based on a Reddit comment.
# [2] https://www.reddit.com/r/Fedora/comments/5eb633/solution_running_graphical_app_with_sudo_in/

if (( $# != 1 )); then
    echo "Illegal number of parameters."
    echo
    echo "Usage: wsudo [command]"
    exit 1
fi

for cmd in sudo xhost; do
    if ! type -P $cmd &>/dev/null; then
        echo "$cmd it's not installed. Aborting." >&2
        exit 1
    fi
done

xhost +SI:localuser:root
sudo $1
#disable root access after application terminates
xhost -SI:localuser:root
#print access status to allow verification that root access was removed
xhost

関連情報