TL; DR - Когда рабочий Немо/наутилус с поднятыми полномочиями*, существует ТОННА пользователей/групп на вкладке полномочий..., они все созданы затор в недоступном для поиска, выпадает, которые не имеют никакой поддержки горячей клавиши. Поиск файла тонких настроек/альтернативы managers/chmod gui-обертки, таким образом, я могу изменить владение от GUI без кошмаров доступности. Какие-либо предложения?
У меня есть несколько версий Ubuntu 18.04, установленной в Virtualbox. Я, прежде всего, использовал Коричный рабочий стол/Немо до этой точки.
Главным образом я чрезвычайно доволен этим рабочим столом. Но основанные на GUI изменения владения (от корня) печальны, потому что ТОННА записей запихивается в выпадающее, что я не могу искать и не могу использовать горячие клавиши от (например, нажать r для перехода для "базирований", и т.д.). Запуск терминала является надежным, но медленным для вывода имен, когда я спешу.
Примечание: То, что это не действительно проблема при выполнении файлового менеджера из некорневых учетных записей, поскольку владелец не доступен для редактирования, и отображены только несколько групп.
Я обычно сталкиваюсь с этим, я пытаюсь закрепить испорченное владение перманент на совместно используемых папках, которыми не владеет текущий пользователь. И это никогда не обычно так быстро и легко как выполнение сингла chown -R
команда.
Я встретился с этим тем же дизайном доступности в:
Я интересуюсь нахождением основанного на GUI решения, которое соответствует этим критериям:
pkexec
или безотносительно). Только упоминая это, потому что я натыкался на горстку приложений, прежде чем это утончается, отказываются работать под корнем.На данном этапе я просто надеюсь, что кто-то знает опции, что я не делаю... Я особенно не забочусь, является ли это определенной для Немо тонкой настройкой, конфигурацией системы, некоторой неясной опцией сборки, другой файловый менеджер / настольная среда, некоторое внешнее приложение, которое переносит GUI chown
(как долго, поскольку я могу бросить его в a nemo-action
и передайте его путь), и т.д. Главным образом просто надеясь избегать дополнительных отговорок запуска терминала и вывода более длинных имен вручную, когда я спешу.
* кроме того, когда я говорю, что "работаю как корень" / "работающий с поднятыми полномочиями", я имею в виду опцию, которая появляется в UI Немо/наутилуса, а не мне запускающийся непосредственно с sudo / pkexec / и т.д.
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus
открываться административными привилегиями.Я буду продолжение, если я найду, обнаруживают что-либо, что работает, но до сих пор, я попробовал следующее:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus
в конечном счете работавший. Не удивительно, это, кажется, имеет ту же проблему как Немо.sudo apt install -y eiciel
и touch /tmp/foo.txt && eiciel /tmp/foo.txt
... кажется довольно прохладным, но к сожалению, или это не позволяет изменять владельцев, или я просто не добираюсь, как сделать это (кажется, добавляет пользователей/группы к ACL вместо того, чтобы заменить текущего владельца/группу).sudo thunar /
и перешел к вкладке полномочий, у выпадающей группы была та же проблема, которую имеет Немо/наутилус, и она даже не позволила бы мне отредактировать пользователя вообще несмотря на выполнение как корень.Недоступное для поиска выпадающее с большим количеством записей и никакой поддержки горячей клавиши, которая появляется в (admin/root/pkexec) Немо и наутилусе> свойства> вкладка Permissions.
ОБНОВЛЕНИЕ: не услышали никакие другие ответы, и это работало намного лучше, так как я обновил его для добавления поддержки мультивыбора, таким образом, я предполагаю, испытывая недостаток в любых других опциях, я приму это как свой ответ
<час>, я все еще очень интересуюсь другими ответами, но я, по крайней мере, нашел несколько hackish обходное решение (удар + yad + pkexec), который я считаю лучше чем ничего..., также шел вперед и отправил его как запрос новых функций в проекте Немо, таким образом, надо надеяться, один из тех парней может выяснить что-то лучше, чем, что я имею здесь.
Мое обходное решение принимает следующее:
sudo apt install -y yad
, Это потребует создания 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
, это автоматически фильтрует для укоренения + несервисные пользователи/группы:
примечание: раскрытие на самом деле отсортировано убывание A-Z; но я отредактировал свои имена пользователей в изображении..., потому что это - Интернет :-)