файловый менеджер nautilus/nemo/other - предложения для более доступного основанного на GUI управления владельца?

Короткая версия

TL; DR - Когда рабочий Немо/наутилус с поднятыми полномочиями*, существует ТОННА пользователей/групп на вкладке полномочий..., они все созданы затор в недоступном для поиска, выпадает, которые не имеют никакой поддержки горячей клавиши. Поиск файла тонких настроек/альтернативы managers/chmod gui-обертки, таким образом, я могу изменить владение от GUI без кошмаров доступности. Какие-либо предложения?


Подробнее

У меня есть несколько версий Ubuntu 18.04, установленной в Virtualbox. Я, прежде всего, использовал Коричный рабочий стол/Немо до этой точки.

Главным образом я чрезвычайно доволен этим рабочим столом. Но основанные на GUI изменения владения (от корня) печальны, потому что ТОННА записей запихивается в выпадающее, что я не могу искать и не могу использовать горячие клавиши от (например, нажать r для перехода для "базирований", и т.д.). Запуск терминала является надежным, но медленным для вывода имен, когда я спешу.

Примечание: То, что это не действительно проблема при выполнении файлового менеджера из некорневых учетных записей, поскольку владелец не доступен для редактирования, и отображены только несколько групп.

Я обычно сталкиваюсь с этим, я пытаюсь закрепить испорченное владение перманент на совместно используемых папках, которыми не владеет текущий пользователь. И это никогда не обычно так быстро и легко как выполнение сингла chown -R команда.

Я встретился с этим тем же дизайном доступности в:

  • Немо v.3.6.5 (человечность 18.04/gnome+cinnnamon)
  • Немо v4.2.3 (в популярном поддистрибутиве, который мне, по-видимому, больше не разрешают упомянуть здесь),
  • наутилус v3.26.4 (ubuntu 18.04/gnome).

Критерии:

Я интересуюсь нахождением основанного на GUI решения, которое соответствует этим критериям:

  • Работы над некоторой разновидностью Ubuntu 18.04 / бионический (до н.э я предпочитаю выпуски LTS),
  • Достойная пользовательская доступность для списков 50-100 пользователей/групп (например, по крайней мере пытается иметь дело с нетривиальным размером списка такой как при наличии поддержки горячей клавиши, поисковых фильтров, опция скрыть сервисные учетные записи или что-то еще),
  • Никакие проблемы, работающие под корнем (например, через pkexec или безотносительно). Только упоминая это, потому что я натыкался на горстку приложений, прежде чем это утончается, отказываются работать под корнем.

На данном этапе я просто надеюсь, что кто-то знает опции, что я не делаю... Я особенно не забочусь, является ли это определенной для Немо тонкой настройкой, конфигурацией системы, некоторой неясной опцией сборки, другой файловый менеджер / настольная среда, некоторое внешнее приложение, которое переносит GUI chown (как долго, поскольку я могу бросить его в a nemo-action и передайте его путь), и т.д. Главным образом просто надеясь избегать дополнительных отговорок запуска терминала и вывода более длинных имен вручную, когда я спешу.

* кроме того, когда я говорю, что "работаю как корень" / "работающий с поднятыми полномочиями", я имею в виду опцию, которая появляется в UI Немо/наутилуса, а не мне запускающийся непосредственно с sudo / pkexec / и т.д.


Шаги для просмотра диалоговой проблемы:

  1. Создайте папку, названную "тестом" на рабочем столе или везде, где это принадлежит некорневой учетной записи
  2. В Немо щелкните правой кнопкой> "Открытый, поскольку корень"> вводит пароль. Или для наутилуса, выполненного pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus открываться административными привилегиями.
  3. С администраторским экземпляром щелкните правой кнопкой по "тестовой" папке> вкладка Properties> Permissions
  4. Заметьте, что ВСЕ сервисные учетные записи и группы отображены без средств отфильтровать их / никакой флажок для сокрытия их. Заметьте, что нажатие "R" в выпадающем НЕ переходит к или выбирает "корень" (или независимо от того, что первая учетная запись, запускающаяся с "R"). В моем случае существует что-то как 50 отображенных пользователей (3 из которых являются несервисными учетными записями) и что-то как 80 отображенных групп (8 из которых не связаны с сервисными учетными записями). Для меня это - кошмар доступности, и он разбирает ищущие вещи, почти столь же болезненные как бывший должный запустить терминал и вывести его вручную.

Что я попробовал:

Я буду продолжение, если я найду, обнаруживают что-либо, что работает, но до сих пор, я попробовал следующее:

  • Разрешение было почти точно, что я ищу за исключением того, что это, кажется, требует вывода имен вместо того, чтобы выбрать из списка/выпадающего/и т.д. К сожалению, у меня есть абсолютно нулевые навыки GTK в данный момент (хотя я мог бы пересмотреть это, когда у меня есть больше времени, если ни у кого нет лучших предложений).
  • Ubuntu 18.04.2/гнома - Не мог выяснить, как работать как корень первоначально, но pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus в конечном счете работавший. Не удивительно, это, кажется, имеет ту же проблему как Немо.
  • Ubuntu 18.04.2/корицы - после установки корицы и рабочего Немо, как упомянуто выше, это не делает то, что я ищу.
  • Kubuntu 18.04 - не Мог найти способ запустить дельфина как корень, который, таким образом, не в состоянии протестировать. Поля пользователя/Группы отобразились серым для меня при выполнении как некорневая учетная запись по умолчанию на livedisc. Кажется, что это - проблема с v17, и я должен был бы заставить v18 даже иметь шанс при выполнении как корень.
  • ОБНОВЛЕНИЕ 1: Найденный этим упоминанием сайта Eiciel. Испытанный это с sudo apt install -y eiciel и touch /tmp/foo.txt && eiciel /tmp/foo.txt ... кажется довольно прохладным, но к сожалению, или это не позволяет изменять владельцев, или я просто не добираюсь, как сделать это (кажется, добавляет пользователей/группы к ACL вместо того, чтобы заменить текущего владельца/группу).
  • ОБНОВЛЕНИЕ 2: протестированный thunar на человечности поддистрибутив на основе 18.04. Когда я выполнил его с sudo thunar / и перешел к вкладке полномочий, у выпадающей группы была та же проблема, которую имеет Немо/наутилус, и она даже не позволила бы мне отредактировать пользователя вообще несмотря на выполнение как корень.
  • ОБНОВЛЕНИЕ 3: протестированный с участником общественной кампании в kubuntu., работающем как корень, на диалоговом окне полномочий, поля группы владельца/владения являются просто полями ввода текста (например, необходимо вывести его).

Снимок экрана

Недоступное для поиска выпадающее с большим количеством записей и никакой поддержки горячей клавиши, которая появляется в (admin/root/pkexec) Немо и наутилусе> свойства> вкладка Permissions.

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

1
задан 15 October 2019 в 23:50

1 ответ

ОБНОВЛЕНИЕ: не услышали никакие другие ответы, и это работало намного лучше, так как я обновил его для добавления поддержки мультивыбора, таким образом, я предполагаю, испытывая недостаток в любых других опциях, я приму это как свой ответ

<час>

, я все еще очень интересуюсь другими ответами, но я, по крайней мере, нашел несколько hackish обходное решение (удар + yad + pkexec), который я считаю лучше чем ничего..., также шел вперед и отправил его как запрос новых функций в проекте Немо, таким образом, надо надеяться, один из тех парней может выяснить что-то лучше, чем, что я имею здесь.

Предположения

Мое обходное решение принимает следующее:

  • у Вас есть установленный yad: sudo apt install -y yad
  • Вы не возражаете редактировать пользователя/группу в отдельном диалоговом окне (например, материал chmod не обрабатывается вообще; только показанный)
  • Вы не возражаете делать некоторую работу, требующую беготни для начальной настройки
  • , Вы соглашаетесь с моим очень бесхитростным выбором пользователя/группы.
  • Вы соглашаетесь с выпадающим не нажатия клавиш поддержки / автоматическое заполнение.
  • материал policykit делает его так, чтобы некорневой Немо получил подлинную подсказку (каждый раз), но корень Немо никогда не запрашивается. Можно всегда изменять policykit настройки, если Вы хотите быть менее безопасными (не рекомендуемый tho).
  • Вы полагаете, что я не испортил policykit настройки (это работает за мной и, кажется, запрашивает правильно, но я не предлагаю гарантий на безопасности)
  • , Вы соглашаетесь с меньше, чем звездной производительностью, следующей из передачи для избиения сценария негласно
<час>

Установка

, Это потребует создания 3 файлов и редактирования четверти (для 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) Создают основной сценарий

удара Файл № 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) Создают действие Немо (таким образом, это появляется в контекстном меню)

Файл № 3: tmp-действие (закончится в/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) Создают policykit исключения

, Вы можете или не можете уже иметь 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

при запуске от терминала, затем просто подтверждают работы опции контекстного меню Немо и всю пользу.

<час>

Снимки экрана / Предварительный просмотр

всплывающее окно, созданное с yad

enter image description here

, это автоматически фильтрует для укоренения + несервисные пользователи/группы:

примечание: раскрытие на самом деле отсортировано убывание A-Z; но я отредактировал свои имена пользователей в изображении..., потому что это - Интернет :-)

enter image description here

1
ответ дан 7 December 2019 в 14:57

Другие вопросы по тегам:

Похожие вопросы: