web-dev-qa-db-ja.com

nautilus / nemo / other file manager-よりアクセスしやすいGUIベースの所有者管理のための提案?

短縮版

TL; DR-昇格された特権でnemo/nautilusを実行すると、アクセス許可タブにユーザー/グループのTONが表示されます...それらはすべて、検索不可能なドロップダウンに詰まっていますホットキーのサポートはありません。アクセシビリティの悪夢なしに所有権をGUIから変更できるように、微調整/代替ファイルマネージャー/ chmod guiラッパーを探しています。提案はありますか?


より詳しい情報

VirtualboxにUbuntu 18.04のいくつかのバージョンがインストールされています。これまでは主に Cinnamon desktop /nemoを使用してきました。

主に、私はこのデスクトップに非常に満足しています。しかし、GUIベースの所有権の変更(ルートから)は、エントリのTONがドロップダウンに詰まっているため、検索できず、ホットキーを使用できないため(たとえば、 r 「ルート」などにジャンプします)。端末の起動は信頼できますが、急いでいるときは名前の入力に時間がかかります。

注:非rootアカウントからファイルマネージャを実行する場合、所有者は編集できず、いくつかのグループしか表示されないため、これは実際には問題ではありません。

私は通常、これに遭遇しました。現在のユーザーが所有していない共有フォルダーの誤った所有権パーマを修正しようとしています。また、通常、単一のchown -Rコマンドを実行するほど迅速かつ簡単ではありません。

私はこれと同じアクセシビリティ設計に遭遇しました:

  • nemo v.3.6.5(ubuntu 18.04/gnome + cinnnamon)
  • nemo v4.2.3(人気のあるサブディストリビューションでは、ここでは言及できなくなっているようです)
  • nautilus v3.26.4(ubuntu 18.04/gnome)。

基準:

以下の基準を満たすGUIベースのソリューションを見つけることに興味があります。

  • Ubuntu 18.04/bionicのいくつかのフレーバーで動作します(bc私はLTSエディションを好む)
  • 50-100のユーザー/グループのリストに対する適切なユーザーアクセシビリティ(少なくとも、ホットキーサポート、検索フィルター、サービスアカウントを非表示にするオプションなど、重要なリストのサイズに対処する試み)
  • ルートの下で実行されている問題はありません(例:pkexecなど)。ルートで実行することを拒否する前に、私はいくつかのアプリに出くわしたので、これについてのみ言及します。

この時点では、私が知らないオプションを誰かが知っていることを望んでいます...これがネモ固有のTweak、システム構成、あいまいなビルドオプション、別のファイルマネージャーであるかどうかは特に気にしません/ desktop環境、chownの周りにGUIをラップするいくつかの外部アプリ(nemo-actionに投げてパスを渡すことができる限り)など。端末を起動して、急いでいるときに長い名前を手でタイプする方法。

*また、「ルートとして実行」/「昇格された権限で実行」と言っている場合、Sudo/pkexec /などで直接起動するのではなく、nemo/nautilus UIに表示されるオプションを意味します。


ダイアログの問題を表示する手順:

  1. デスクトップまたは非ルートアカウントが所有する場所に「test」という名前のフォルダーを作成します
  2. Nemoで、右クリック> [ルートとして開く]>パスワードを入力します。またはnautilusの場合は、pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilusを実行して管理者権限で開きます。
  3. 管理インスタンスで、「test」フォルダを右クリックし、[プロパティ]> [権限]タブを選択します
  4. すべてのサービスアカウントとグループが表示され、それらをフィルタリングする手段がない/それらを非表示にするチェックボックスがないことに注意してください。ドロップダウンで「R」を押しても「root」(または「R」で始まる最初のアカウントが何であれ)にジャンプまたは選択しないことに注意してください。私の場合、50人のユーザー(そのうち3つは非サービスアカウント)が表示され、80人のグループが表示されます(そのうち8つはサービスアカウントに関連していません)。私にとって、これはアクセシビリティの悪夢であり、端末を起動して手で入力する必要があるのと同じくらい苦労して物を探すことができます。

私が試したこと:

うまくいくものを見つけたらフォローアップしますが、これまでのところ、次のことを試しました。

  • Permit は、リスト/ドロップダウンなどから選択するのではなく、名前を入力する必要があるように見えることを除いて、私が探しているものとほぼ同じでした。残念ながら、現時点では絶対にGTKのスキルはありません(他にもっと良い提案がない場合は、時間があるときにこれを再訪するかもしれませんが)。
  • Ubuntu 18.04.2/gnome-最初はrootとして実行する方法を理解できませんでしたが、pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilusは最終的には機能しました。当然のことながら、これにはネモと同じ問題があるようです。
  • Ubuntu 18.04.2/cinnamon-上記のように installing cinnamon およびnemoを実行した後、これは私が探していることを行いません。
  • Kubuntu 18.04-rootとしてイルカを起動する方法が見つからなかったため、テストできませんでした。 livediscでデフォルトの非rootアカウントとして実行すると、ユーザー/グループのフィールドがグレー表示されました。このように聞こえるのはv17の問題で、v18でrootとして実行される可能性を得る必要があります。
  • 更新1:見つかりました このサイト Eicielについて言及しています。 Sudo apt install -y eicieltouch /tmp/foo.txt && eiciel /tmp/foo.txtで試してみました...かなりかっこいいようですが、残念ながら、所有者の変更が許可されていないか、方法がわからないだけです(-add現在の所有者/グループを置き換えるのではなく、ユーザー/グループをACLに追加します)。
  • 更新2:ubuntu 18.04ベースのサブディストリビューションでthunarをテストしました。 Sudo thunar /を使用して実行し、[権限]タブに移動すると、グループのドロップダウンにnemo/nautilusと同じ問題があり、rootとして実行しているにもかかわらず、ユーザーをまったく編集できませんでした。
  • 更新3:kubuntuでkrusaderを使用してテスト。 rootとして実行し、権限ダイアログで、所有者/所有グループフィールドは単なるテキスト入力フィールドです(たとえば、入力する必要があります)。

スクリーンショット

(admin/root/pkexec)nemoとnautilus>プロパティ>アクセス許可タブに表示される多数のエントリとホットキーサポートのない検索不可能なドロップダウン。

Non-searchable drop-down with lots of entries and no hotkey support

1
zpangwin

更新:他の応答を聞いたことはなく、これを更新して複数選択サポートを追加したので、これははるかにうまく機能しているので、他のオプションがないため、これを私の答えとして受け入れます

更新#2:私はそれ以来、面倒な作業をすべて行い、以下の手順を自動化するスクリプトを作成しました。スクリプトの詳細については、 my github を参照してください。


私はまだ他の回答に非常に興味がありますが、少なくともいくぶんハックな回避策(bash + yad + pkexec)を見つけました。プロジェクト、それでうまくいけば、それらの人の一人が私がここに持っているものよりも良いものを理解できるでしょう。

仮定

私の回避策は次のことを前提としています。

  • yadがインストールされています:Sudo apt install -y yad
  • 別のダイアログでユーザー/グループを編集してもかまいません(たとえば、chmodのものはまったく処理されず、chownのみが処理されます)。
  • 初期設定のためにいくつかのレッグワークを行ってもかまいません
  • あなたは私の非常に洗練されていないユーザー/グループの選択で大丈夫です。
  • ドロップダウンはキープレス/オートコンプリートをサポートしていません。
  • ポリシーキットのものは、非ルートニモが認証プロンプトを受け取る(毎回)ようにしますが、ルートニモはプロンプトを表示しません。安全性を低下させたい場合は、ポリシーキットの設定をいつでも変更できます(推奨されません)。
  • 私はポリシーキットの設定をめちゃくちゃにしなかったと信じています(私のために実行され、正しくプロンプトが表示されるようですが、セキュリティについては保証しません)
  • 舞台裏でのbashスクリプトへのハンドオフにより、優れたパフォーマンスが得られなくても問題ありません。

セットアップ

これには、3つのファイルを作成し、4番目のファイルを編集する必要があります(policykit定義用)。

1)最初に、一時フォルダと3つの一時ファイルを作成します。

mkdir /tmp/chown-gui
cd /tmp/chown-gui
# create temp files - we'll rename these later when they get moved
touch tmp-pkexec tmp-sh tmp-action

2)メインbashスクリプトを作成する

ファイル#1:tmp-sh(最終的に/ usr/bin/chown-gui-wrapperにあります)

#!/bin/bash

# v1.2.0
# Last updated on 2019 Oct 15

Prompt_on_multiple_files="true";
default_to_once_for_all_paths_if_no_Prompt="true";
apply_once_for_all_paths="false";

has_multiple_paths="false";
second_file="$2";
if [[ "" != "${second_file}" ]]; then
    has_multiple_paths="true";

    if [[ "true" == "${Prompt_on_multiple_files}" ]]; then
        Prompt_response=$( yad --center --button="gtk-ok:0" --title "Multiple Paths Detected" --form --field="\n    How would you like to apply permissions?    \n:LBL" "" --field="${label_hpadding}:CB" "Set permissions once and apply it to all paths\!Set permissions for each path individually");
        if [[ ! $Prompt_response =~ ^.*individually.*$ ]]; then
            apply_once_for_all_paths="true";
        fi
    Elif [[ "true" == "${default_to_once_for_all_paths_if_no_Prompt}" ]]; then
        apply_once_for_all_paths="true";
    fi
fi

#echo "Prompt_on_multiple_files=\"${Prompt_on_multiple_files}\"";
#echo "default_to_once_for_all_paths_if_no_Prompt=\"${default_to_once_for_all_paths_if_no_Prompt}\"";
#echo "apply_once_for_all_paths=\"${apply_once_for_all_paths}\"";

popup_title="Please select the user and group owners";
popup_text="Please select the user and group owners for the following path:"
label_hpadding="    ";

for filepath in "${@}"; do
    #echo "filepath in array is $filepath";

    if [[ ! -e "${filepath}" ]]; then
        ERROR_MSG="ERROR: File '${filepath}' does not exist";
        notify-send --icon=error "${ERROR_MSG}";
        echo "${ERROR_MSG}";
        continue;
    fi
    filename=$(basename "${filepath}")
    current_user=$(stat -c "%U" "${filepath}");
    current_group=$(stat -c "%G" "${filepath}");

    show_checkbox="false";
    if [[ -d "${filepath}" ]]; then
        show_checkbox="true";
    fi

    # get list of non-service accounts/groups
    users_list=$(getent passwd {1000..60000}|awk -F: '{print $1}'|tr '\n' ' ');
    groups_list=$(getent group {1000..60000}|awk -F: '{print $1}'|tr '\n' ' ');

    sorted_user_list=$(echo $(printf '%s\n' root $users_list | sort -u)|sed -E "s/\\b($current_user)\\b/^\\1/g"|tr ' ' '\!');
    sorted_group_list=$(echo $(printf '%s\n' root $groups_list | sort -u)|sed -E "s/\\b($current_group)\\b/^\\1/g"|tr ' ' '\!');

    #echo "show_checkbox: ${show_checkbox}";
    if [[ "true" == "${show_checkbox}" ]]; then
        formdata=$(yad --center --button="gtk-cancel:1" --button="gtk-ok:0" --title "${popup_title}" --form --field="\n${label_hpadding}${popup_text}${label_hpadding}\n:LBL" "" --field="${label_hpadding}Path:${label_hpadding}:RO" "${filepath}" --field="${label_hpadding}User:${label_hpadding}:CBE" "${sorted_user_list}" --field="${label_hpadding}Group:${label_hpadding}:CBE" "${sorted_group_list}" --field "\n:LBL" "" --field="Apply Recursively?:CHK" "FALSE");
    else
        formdata=$(yad --center --button="gtk-cancel:1" --button="gtk-ok:0" --title "${popup_title}" --form --field="\n${label_hpadding}${popup_text}${label_hpadding}\n:LBL" "" --field="${label_hpadding}Path:${label_hpadding}:RO" "${filepath}" --field="${label_hpadding}User:${label_hpadding}:CBE" "${sorted_user_list}" --field="${label_hpadding}Group:${label_hpadding}:CBE" "${sorted_group_list}");
    fi
    if [[ "" == "$formdata" ]]; then
        echo "user pressed cancel for filepath '${filepath}'";
        continue;
    fi
    #echo "formdata=\"${formdata}\"";

    new_user=$(echo "${formdata}"|awk -F'|' '{print $3}');
    new_group=$(echo "${formdata}"|awk -F'|' '{print $4}');
    is_recursive="FALSE";
    if [[ "true" == "${show_checkbox}" ]]; then
        is_recursive=$(echo "${formdata}"|awk -F'|' '{print $6}');
    fi
    #echo "new_user=\"${new_user}\"";
    #echo "new_group=\"${new_group}\"";
    #echo "is_recursive=\"${is_recursive}\"";

    RECURSIVE_FLAG='';
    if [[ "TRUE" == "${is_recursive}" ]]; then
        RECURSIVE_FLAG='-R';
    fi

    if [[ "true" == "${has_multiple_paths}" && "true" == "${apply_once_for_all_paths}" ]]; then
        chown $RECURSIVE_FLAG "${new_user}":"${new_group}" "${@}";
        break;
    else
        chown $RECURSIVE_FLAG "${new_user}":"${new_group}" "${filepath}";
    fi
done

3)ラッパースクリプトを作成する

ファイル#2:tmp-pkexec(最終的に/ usr/bin/pkexec-chown-gui-wrapperにあります)

#!/bin/bash

# v1.2.0
# Last Updated: 2019 Oct 15

yad_installed=$(which yad);
if [[ "" == "${yad_installed}" ]]; then
    ERROR_MSG="ERROR: Missing dependency 'yad'; Please run: Sudo apt install -y yad;";
    notify-send --icon=error "${ERROR_MSG}";
    echo "${ERROR_MSG}";
    exit;
fi

pkexec --user root env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /usr/bin/chown-gui-wrapper "${@}"

4)nemoアクションを作成します(右クリックメニューに表示されます)。

ファイル#3:tmp-action(最終的に/usr/share/nemo/actions/change-owner.nemo_actionにあります)

[Nemo Action]
Name=Change Owner/Group
Comment=GUI wrapper for chown
Selection=s
Exec=/usr/bin/pkexec-chown-gui-wrapper %F
Icon-Name=gnome-settings
Extensions=any;
Quote=double

5)すべての一時ファイルを適切な場所にコピーし、権限を設定します

cd /tmp/chown-gui
Sudo cp tmp-sh /usr/bin/chown-gui-wrapper;
Sudo cp tmp-pkexec /usr/bin/pkexec-chown-gui-wrapper;
Sudo cp tmp-action /usr/share/nemo/actions/change-owner.nemo_action;

Sudo chown root:root /usr/bin/chown-gui-wrapper;
Sudo chown root:root /usr/bin/pkexec-chown-gui-wrapper;
Sudo chown root:root /usr/share/nemo/actions/change-owner.nemo_action;

Sudo chmod 755 /usr/bin/chown-gui-wrapper;
Sudo chmod 755 /usr/bin/pkexec-chown-gui-wrapper;
Sudo chmod 644 /usr/share/nemo/actions/change-owner.nemo_action;
# This part is needed if you want to be able to use this in nemo with
# single-file selections AND multiple-file selections BUT NOT when
# there is NO selection (e.g. directory background).
# Nemo's 'Selection' option doesn't currently allow multiple values
#   and 'm' only considers "2+" and 'a' considers "0+"
# whereas this gives us "1,2+"
#
Sudo cp -a /usr/share/nemo/actions/change-owner.nemo_action /usr/share/nemo/actions/change-owner-single-file.nemo_action;
Sudo mv /usr/share/nemo/actions/change-owner.nemo_action /usr/share/nemo/actions/change-owner-multiple-files.nemo_action;
Sudo sed -i -E 's/^(Selection)=s/\1=m/' /usr/share/nemo/actions/change-owner-multiple-files.nemo_action;

6)yadがインストールされていることを確認します。これなしでは絶対に機能しません。あなたは潜在的にそれをzenityで置き換えることができます(しかしyadはzenityのフォークなので、それは私にはかなり無意味なようです)

Sudo apt install -y yad

7)ポリシーキットの例外を作成する

Pkexec.policyファイルがすでにある場合とない場合があります。その場合は、<action>...</action>ブロック。ファイルがない場合は、作成します(chmod 664およびchown root:root:)全体をコピーします<policyconfig>...</policyconfig>ブロック。

編集/作成するPolicykitファイル:/usr/share/polkit-1/actions/org.freedesktop.policykit.pkexec.policy

内容(新しいファイル):

<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
  <action id="org.freedesktop.policykit.pkexec.run-chown-gui-wrapper">
    <description>GUI wrapper for chown</description>
    <message>Authentication is required to run chown-gui-wrapper</message>
    <icon_name>gnome-settings</icon_name>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/bin/bash</annotate>
    <annotate key="org.freedesktop.policykit.exec.argv1">/usr/bin/chown-gui-wrapper</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>
</policyconfig>

8)設定を確認

# make dummy file to test with
echo dummy > /tmp/foo.txt

# check that you get the gui pop-up
# no need for root, just confirm gui comes up, then you can cancel
/usr/bin/chown-gui-wrapper /tmp/foo.txt

# check that you get the gui pop-up
# might Prompt for auth, just confirm gui comes up, then you can cancel
/usr/bin/pkexec-chown-gui-wrapper /tmp/foo.txt

端末から起動する場合は、nemoコンテキストメニューオプションが機能し、すべて正常であることを確認します。


スクリーンショット/プレビュー

yadで作成されたポップアップ

enter image description here

root +非サービスユーザー/グループに自動的にフィルタリングします。

注:ドロップダウンは実際にはA〜Zの降順で並べ替えられています。しかし、私は画像のユーザー名を編集しました...これはインターネットなので:-)

enter image description here

1
zpangwin