KDE не сохраняет ассоциацию файлов mime-типа

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 не разработан для многопользовательских -систем, и есть две проблемы, которые нарушили его работу.

  1. udisks использует древнюю маску unix 0022 при монтировании файловых систем FAT, таких как SD-карта камеры,от имени пользователей.
  2. ошибка systemd (или "RFE" лол):Разрешить выбор "systemd --пользователя" umask .

Например, когда вы используете cp для копирования изображения с SD-карты, cp копирует исходный режим, ограниченный текущим umask. Таким образом, это затрагивает обе проблемы. (На него может повлиять первая проблема, потому что вы запустили cpиз службы systemd --user, известной какgnome-terminal-server.service).

(Другим аспектом этой ситуации является то, что Debian внедрил UPG с самого начала, но затем сломал umask, когда они реализовали PAM. Хотя эту проблему гораздо проще решить с помощью конфигурации PAM, она, возможно, иллюстрирует отсутствие спроса и, возможно, способствовала недостаточной осведомленности об UPG ).

Проблема 2 нарушает традиционное использование UPG, основанное на umask0002 и установленном -общем каталоге GID.

Однако, когда вы используете ACL по умолчанию для общего каталога, umaskфактически перегружен -, и проблема 1 является «единственной» проблемой.

3
24.03.2020, 22:10
3 ответа

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

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 не требует обновления базы данных после внесения изменений, что приводит к этому.

3
28.04.2021, 23:25

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 .

-2
28.04.2021, 23:25

Вот пошаговый -за -подход к отладке проблем сопоставления MIME-типов.

  1. Определите MIME-тип файла.

    $ xdg-mime query filetype ~/.ssh/id_rsa.pub
    application/vnd.ms-publisher
    
  2. Определите обработчик по умолчанию для 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
    
  3. Используйте 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. Результат не всегда одинаков, как мы увидим.

  4. Проверьте, изменился ли при этом обработчик по умолчанию.

    Если 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
    
  5. Если 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].

    https://cgit.kde.org/kde-cli-tools.git/tree/keditfiletype/mimetypedata.cpp?id=5d1c3d77798949c21958b60cf78d36fb49c57ea2#n367

    Согласно спецификации 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. Успех!

  6. Что, если он все еще не работает?

    В 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 или настраиваемые файлы рабочего стола, ситуация становится еще более сложной.

2
28.04.2021, 23:25

Теги

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