Amusingly it isn't using rename() in this case, because the move crosses filesystems. Nautilus is just providing consistent semantics in this case by re-applying permissions form the source file :trollface:.
Хотел бы я, чтобы проблема была только в этом. Но я получаю такие же действующие разрешения и при копировании . Это правда, что ACL по умолчанию применяется, если я проверю с помощью
getfacl
. Однако он также показывает «маску» и то, что применяемый по умолчанию -ACL эффективно отключен маской.Даже для того, чтобы заставить копирование работать... вам не обязательно нужен ACL по умолчанию; исторически вы полагались бы на шаблон Частные группы пользователей с общим каталогом, отмеченным установленным -GID.
К сожалению, современный GNOME не разработан для многопользовательских -систем, и есть две проблемы, которые нарушили его работу.
- udisks использует древнюю маску unix 0022 при монтировании файловых систем FAT, таких как SD-карта камеры,от имени пользователей.
- ошибка systemd (или "RFE" лол):Разрешить выбор "systemd --пользователя" umask .
Например, когда вы используете cp для копирования изображения с SD-карты, cp копирует исходный режим, ограниченный текущим umask. Таким образом, это затрагивает обе проблемы. (На него может повлиять первая проблема, потому что вы запустили
cp
из службыsystemd --user
, известной какgnome-terminal-server.service
).(Другим аспектом этой ситуации является то, что Debian внедрил UPG с самого начала, но затем сломал umask, когда они реализовали PAM. Хотя эту проблему гораздо проще решить с помощью конфигурации PAM, она, возможно, иллюстрирует отсутствие спроса и, возможно, способствовала недостаточной осведомленности об UPG ).
Проблема 2 нарушает традиционное использование UPG, основанное на
umask
0002 и установленном -общем каталоге GID.Однако, когда вы используете ACL по умолчанию для общего каталога,
umask
фактически перегружен -, и проблема 1 является «единственной» проблемой.
То же самое здесь, в совершенно другой системе. Сделайте это как обычный пользователь:
update-mime-database $HOME/.local/share/mime
Если вам нужен полный сброс, сделайте это:
cd $HOME/.local/share/
mv mime mime2
mkdir -p mime/packages
update-mime-database $HOME/.local/share/mime
Это приведет к сбросу всех ваших поврежденных настроек MIME, но это будет работать. В настоящее время KDE не требует обновления базы данных после внесения изменений, что приводит к этому.
I do not understand why the log messages indicate "Service type not found" for mime-types that are present on my system
Это может быть либо ошибка , либо ваши файлы повреждены . Мой голос пойдет за коррупцию.
Чтобы быть уверенным, попробуйте ту же процедуру в новой системе и сообщите, если она работает.
Затем, если вы уверены, что это искажение, попробуйте
# paccheck --md5sum --quiet
, который будет проверять установленные пакеты и сообщать о повреждении или изменении файлов. paccheck
является частью пакета pacutils . Это обсуждается на Arch Wiki .
Вот пошаговый -за -подход к отладке проблем сопоставления MIME-типов.
Определите MIME-тип файла.
$ xdg-mime query filetype ~/.ssh/id_rsa.pub
application/vnd.ms-publisher
Определите обработчик по умолчанию для MIME-типа.
$ xdg-mime query default application/vnd.ms-publisher
libreoffice-writer.desktop
Добавьте переменную среды XDG_UTILS_DEBUG_LEVEL=2
для получения дополнительной информации.
$ XDG_UTILS_DEBUG_LEVEL=2 xdg-mime query default application/vnd.ms-publisher
Running KDE trader query "application/vnd.ms-publisher" mimetype and "Application" servicetype
libreoffice-writer.desktop
Используйте xdg-mime
для изменения ассоциации по умолчанию.
$ XDG_UTILS_DEBUG_LEVEL=2 xdg-mime default org.kde.kate.desktop application/vnd.ms-publisher
make_default_kde: No kde runtime detected
make_default_generic org.kde.kate.desktop application/vnd.ms-publisher
Updating /home/nathaniel/.config/mimeapps.list
Это также можно сделать с помощью графических программ, таких как Dolphin. Результат не всегда одинаков, как мы увидим.
Проверьте, изменился ли при этом обработчик по умолчанию.
Если xdg-mime
выполнено успешно, это будет выглядеть так:
$ xdg-mime query default application/vnd.ms-publisher
org.kde.kate.desktop
Если это не сработало, вы увидите это снова.
$ xdg-mime query default application/vnd.ms-publisher
libreoffice-writer.desktop
Если xdg-mime
не сработало, пришло время отладки. Сначала проверьте этот файл:
~/.config/mimeapps.list
Он имеет эти разделы :[Added Associations]
, [Default Applications]
и [Removed Associations]
.
Давайте быстро grep
посмотрим, что происходит.
$ grep 'application/vnd.ms-publisher' ~/.config/mimeapps.list
application/vnd.ms-publisher=libreoffice-writer.desktop;libreoffice-draw.desktop;
application/vnd.ms-publisher=org.kde.kate.desktop;
Хм, это выглядит неправильно. Если мы проверим файл дальше, мы увидим, что xdg-mime
добавил kate в [Default Applications]
, но не [Added Associations]
. Если бы мы изменили MIME-тип с помощью Dolphin / keditfiletype5 application/vnd.ms-publisher
, мы бы заметили, что он добавил бы org.kde.kate.desktop;
перед libreoffice-writer.desktop;
в [Added Associations]
.
Согласно спецификации FreeDesktop , это не должно иметь значения; все, что ниже [Default Applications]
, должно быть значением по умолчанию, даже если оно не указано в [Added Associations]
.
The [Default Applications] group indicates the default application to be used for a given mimetype. This is for instance the one that will be started when double-clicking on a file in a file manager. If the application is no longer installed, the next application in the list is attempted, and so on.
Вероятно, это ошибка в KDE, и здесь она исправлена :
Make "Default Applications" in mimeapps.list the preferred applications
https://phabricator.kde.org/D26690
Это возможно также ошибка в xdg-mime
, которая представляет собой гигантский сценарий оболочки , которому не уделяется достаточно внимания, так как ему нужно выполнить подсказку -наверх работа.
В любом случае, давайте исправим эту строку, чтобы она говорила это:
application/vnd.ms-publisher=org.kde.kate.desktop;libreoffice-writer.desktop;libreoffice-draw.desktop;
Посмотрим, помогло ли это.
$ xdg-mime query default application/vnd.ms-publisher
libreoffice-writer.desktop
Хм, почему это не сработало?
Это потому, что xdg-mime
сам ничего не проверяет,он вызывает любые инструменты, которые использует рабочий стол. В KDE это такие вещи, как kmimetypefinder5
, ktraderclient5
и kbuildsycoca5
. Последнее важно, потому что именно так KDE строит свой кеш ассоциаций MIME-типов.
Обратите внимание, что это не кэш по адресу ~/.local/share/applications/mimeinfo.cache
, хотя это также кеш mimetype, потому что это местоположение указано как «для совместимости, устаревшее» в последней спецификации .
Правильным способом было бы перестроить миметип KDE:
$ kbuildsycoca5
но мы также можем просто удалить его:
$ rm ~/.cache/ksycoca5_*
и повторите попытку:
$ xdg-mime query default application/vnd.ms-publisher
org.kde.kate.desktop
Выглядит многообещающе. Теперь давайте попробуем открыть реальный файл:
$ xdg-open ~/.ssh/id_rsa.pub
В KDE это в основном то же, что и:
$ kde-open5 ~/.ssh/id_rsa.pub
Это должно открыться в текстовом редакторе Kate. Успех!
Что, если он все еще не работает?
В KDE Plasma 5 xdg-mime query default
просто вызывает ktraderclient5 --mimetype
. Таким образом, ktraderclient5 --mimetype application/vnd.ms-publisher
предоставит полезную информацию, хотя вывод может быть объемным.
Добавление XDG_UTILS_DEBUG_LEVEL=2
к командам xdg-*
может улучшить результаты отладки.
Включение ведения журнала в KDE для получения вывода qDebug
также может помочь.
$ if ! test -f ~/.config/QtProject/qtlogging.ini; then printf '[Rules]\n*.debug=true\nqt.*.debug=false\n' > ~/.config/QtProject/qtlogging.ini; else printf 'Error: ~/.config/QtProject/qtlogging.ini already exists.\n'; fi;
Также проверьте, какой файл использует ваше приложение. xdg-open
использует kde-open5
, но ваше приложение может вести себя иначе. Например, он может искать старый, устаревший файл ассоциаций mimetype :
~/.local/share/applications/mimeapps.list
или, может быть, еще более старое место:
~/.local/share/applications/defaults.list
Возможно, вам придется копаться в исходном коде или использовать strace
, чтобы выяснить, какой файл на самом деле использует приложение.
Если вы используете настраиваемые типы mimetype или настраиваемые файлы рабочего стола, ситуация становится еще более сложной.