xdg open что такое

Всё как у больших. Автозагрузка приложений в оконных менеджерах linux

xdg open что такое. Смотреть фото xdg open что такое. Смотреть картинку xdg open что такое. Картинка про xdg open что такое. Фото xdg open что такое

Как-то раз, листая сообщения в профильном systemd чате, в телеграм, я наткнулся на следующий кусок man systemd.special …

Переменные XDG, freedesktop.org, desktop-файлы и autostart

Пользователям полноценных линуксовых графических окружений (KDE, Gnome, Mate etc) прекрасно известна возможность автозапуска приложений при логине пользователя в систему, разработанную инициативной группой Freedesktop.org (ранее X Desktop Group, или XDG), подобная той, что существует, например, в Windows. Данный функционал обеспечивается обычными *.desktop файлами, но лежащими по определённым путям:

Если в этих переменных семейства XDG directories не указано иное, или эти переменные отсутствуют (так происходит в большинстве классических дистрибутивов, привет NixOS!), будут использованы значения по умолчанию.

Итак, с директориями определились. Файлы в них можно:

Всё хорошо. Одно плохо. Это не работает, как минимум, в Leftwm, Spectrwm, xmonad, bspwm, dwm (без патчей точно) и, разумеется, в любимом i3wm. Просто потому, что у них отсутствует session manager. И вот тут мы переходим к самому интересному. Встречайте! systemd!

Systemd как спасательный круг тайловых (и не очень) оконных менеджеров

Эта глава будет самой объёмной. Тут мы разберёмся кто и как может помочь разобрать залежи desktop файлов, кто, как и когда их запустит, и при чём тут вообще systemd. Поехали!

▍ Developers, developers, developers! Генераторы, генераторы, генераторы!

Systemd, как известно, это не только система инициализации, логгирования событий, но и набор готовых дополнительных утилит, готовых сервисов с их юнитами, система управления сетью, and more… Среди прочего systemd может выступать в качестве системного менеджера для пользовательских сервисов — юнитов, работающих в пространстве пользователя. То есть после логина пользователя в систему запускается ещё один экземпляр /usr/lib/systemd только уже от пользователя и позволяет запускать юниты в пространстве пользователя, с наследованием его окружения и правами.

Всё хорошо и замечательно, но есть одно но. Если есть сервисы, их должен кто-то вовремя запустить. То есть запустить ровно тогда, когда будет запущена графическая оболочка… Если посмотреть, произвольный такой юнит, мы увидим там упоминание target-а graphical-session.target (Юнит на основе десктоп файла апплета управления Bluetooth cat /run/user/1000/systemd/generator.late/app-blueman@autostart.service ):

И что же со всем этим делать и как быть? Как получить заветный target?

▍ Графическая оболочка тоже сервис. Подсматриваем в Gnome

Ладно, чёрт с ним, идём смотреть в *.desktop файл xsessions( cat /usr/share/xsessions/gnome.desktop )…

… и понимаем, что попали несколько серьёзнее чем хотелось бы и что гном, в данном случае, нам мало чем поможет. Он изначально заточен под работу с systemd. Идём в эти наши интернеты.

▍ Выходим на финишную прямую. Пишем враппер, юнит и наконец удачно стартуем

Не буду затягивать и утомлять читателя подробностями того, как и где приходилось выуживать информацию по крупицам. Это были и маны и ArchWiki и чёрт его знает что ещё. Лучше сразу приведу готовые, в меру откомментированные файлы.

Итак, копируем дефолтный /usr/share/xsessions/i3.desktop в /usr/share/xsessions/i3-systemd.desktop и немного модифицируем.

Теперь нам нужно написать враппер i3-service который будет подготавливать окружение и запускать i3wm в качестве сервиса. Ну и, разумеется, сам i3.service файл тоже должен быть написан. Итак враппер /usr/local/bin/i3-service :

Ну и наконец вишенка на нашем торте, сам /etc/systemd/user/i3.service :

Что в итоге?

Ну и вообще, приятно быть первооткрывателем. Ибо в процессе гугления и чтения манов, готового рецепта обнаружено не было. Так что любители wm, не относящиеся к systemd хейтерам. Пробуйте. За месяц использования был замечен ровно один косяк. Не работает gvgs-* функционал в pcman-fm, если его запустить хоткеем из i3 Но если запустить из rofi, волшебным образом всё начинает работать. Возможно я забыл импортировать какую-то переменную в d-bus Ну и, чтоб не копипастить, ссылка на гитхаб.

Источник

Default applications (Русский)

Зачем нужны типы MIME: Благодаря им программа «узнает», как поступить с некоторым файлом, например есть файл с расширением .pdf ОС должна «знать», чем открыть и как поступить с данным файлом. Как раз типы MIME сообщают ОС об этом.

Существует множество приложений,способных обрабатывать данные одного определенного типа, поэтому пользователи и даже некоторые пакеты собирают списки приложений по умолчанию для каждого #типа MIME. Хотя изначально Arch Linux не определяет приложения по умолчанию, окружение рабочего стола может это сделать. Также некоторые окружения рабочего стола предоставляют графический интерфейс или файловый менеджер, которые могут интерактивно настраивать приложения по умолчанию. Если вы не используете окружение рабочего стола, вам может потребоваться установить дополнительное программное обеспечение для удобного управления приложениями по умолчанию.

Contents

Типы MIME

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

База данных MIME

Файлы в /usr/share/mime/ не должны редактироваться напрямую, однако их можно сохранить в отдельную базу данных для каждого пользователя в

Новый тип MIME

xdg open что такое. Смотреть фото xdg open что такое. Смотреть картинку xdg open что такое. Картинка про xdg open что такое. Фото xdg open что такоеThis article or section needs expansion.xdg open что такое. Смотреть фото xdg open что такое. Смотреть картинку xdg open что такое. Картинка про xdg open что такое. Фото xdg open что такое

В этом примере определяется новый тип MIME application/x-foobar и присваивается любому файлу с расширением .foo. Просто создайте следующий файл:

А затем обновите базу данных MIME

Конечно, это никак не повлияет, если ярлыки приложения не связаны с типом MIME. Вам может потребоваться создать новые #Ярлыки приложений или отредактировать #mimeapps.list.

Ярлыки приложений

Файлы в /usr/share/applications/ не должны редактироваться напрямую, можно поддерживать отдельную базу данных для каждого пользователя в

Установка приложений по умолчанию

Настройка приложений по умолчанию зависит от используемого лаунчера. К сожалению, существует несколько несовместимых стандартов, и многие программы даже имеют свои собственные форматы.

Наиболее распространенные стандарты описаны ниже для ручного редактирования. Также существует несколько #Утилит, которые могут сделать работу, которая может или не может реализовать следующие стандарты.

Переменные окружения

Стандарт XDG

/.config/mimeapps.listпользовательские переопределения/etc/xdg/mimeapps.listобщесистемные переопределения

/.local/share/applications/mimeapps.list(Устаревшее) пользовательские переопределения/usr/local/share/applications/mimeapps.list
/usr/share/applications/mimeapps.listпереопределения предоставляемые дистрибутивом по умолчанию

/.config/mimeapps.list при записи в него, что приведет к поломке любых символических/жестких ссылок.

Формат

Рассмотрим следующий пример:

Каждый раздел назначает один или несколько ярлыков приложений типам MIME.

Каждый раздел является необязательным и может быть опущен, если он не нужен.

mailcap

xdg open что такое. Смотреть фото xdg open что такое. Смотреть картинку xdg open что такое. Картинка про xdg open что такое. Фото xdg open что такоеThe factual accuracy of this article or section is disputed.xdg open что такое. Смотреть фото xdg open что такое. Смотреть картинку xdg open что такое. Картинка про xdg open что такое. Фото xdg open что такое

Формат mailcap(4) [устаревшая ссылка 2020-05-22] используется почтовыми программами, такими как mutt и sylpheed для открытия нетекстовых файлов. Чтобы эти программы использовали xdg-open, отредактируйте

Утилиты

Хотя можно настроить приложения по умолчанию и типы MIME путем прямого редактирования #mimeapps.list и #База данных MIME, существует множество инструментов, которые могут упростить процесс. Эти инструменты также важны, поскольку приложения могут делегировать открытие файлов этими инструментами, а не пытаться реализовать стандарт типа MIME.

Если вы используете окружение рабочего стола, вы должны сначала проверить, предоставляет ли он свою собственную утилиту. Она должна быть предпочтительнее этих альтернатив.

xdg-utils

Альтернативы xdg-open

perl-file-mimeinfo

Самое главное, что приложения #xdg-utils на самом деле вызывают mimetype вместо file для обнаружения типа MIME, если он не обнаруживает ваше окружение рабочего стола. Это важно, потому что file не следует за стандартом XDG.

mimeo

Однако большая разница с xdg-utils заключается в том, что mimeo также поддерживает пользовательские «файлы ассоциаций», которые допускают более сложные ассоциации. Например, передача определенных аргументов командной строки на основе регулярного выражения соответствует:

xdg-utils-mimeo AUR исправляет xdg-utils так что xdg-open возвращается в mimeo, если окружение рабочего стола не обнаружено.

whippet

В дополнение к стандарту #mimeapps.list, whippet также может использовать базу данных SQlite ассоциаций весового приложения/типа MIME/регулярных выражений для определения, какое приложение использовать.

Собственные замены

ПакетОсобенности
linopen AURРазрешает правила регулярного выражения, может указывать запасное приложение для открывания файлов
mimi-git AURМожет изменять аргументы команды для каждого типа MIME
busking-git AURАналогично mimi, но при этом поддерживает правила регулярных выражений
sx-open AURИспользует простой конфигурационный файл на основе оболочки пользователя (shell)

lsdesktopf

lsdesktopf AUR предоставляет несколько способов поиска в базе данных MIME и ярлыков MIME на рабочем столе.

Решение проблем

Если файл не открывается вашим желаемым приложением по умолчанию, существует несколько возможных причин. Вам может потребоваться проверить каждый случай.

Для связывания приложений с типами MIME требуются ярлыки приложений. Убедитесь, что такая запись существует и может использоваться для открытия (вручную) файлов в приложении.

Отсутствует ассоциация

Нет приложения по умолчанию

Если ярлык приложения связан с типом MIME, его просто нельзя установить как значение по умолчанию. Измените #mimeapps.list, чтобы установить связь по умолчанию.

Нестандартная ассоциация

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

xdg open что такое. Смотреть фото xdg open что такое. Смотреть картинку xdg open что такое. Картинка про xdg open что такое. Фото xdg open что такоеThis article or section needs expansion.xdg open что такое. Смотреть фото xdg open что такое. Смотреть картинку xdg open что такое. Картинка про xdg open что такое. Фото xdg open что такое

Окружения рабочего стола и файловые менеджеры, поддерживающие программы запуска спецификаций в соответствии с определением в файлах .desktop. Смотрите раздел Ярлыки приложений#Ярлык приложения.

Это может произойти, например, если в переменной Exec отсутствуют внутренние параметры, необходимые для открытия файла или того, как приложение отображается в меню. Переменная Exec обычно начинается с % ; чтобы узнать поддерживаемые параметры в настоящее время смотрите exec-переменные.

В следующей таблице перечислены основные записи переменных файлов .desktop которые влияют на запуск приложения, если у него есть тип MIME, связанный с ним.

Источник

Используйте xdg-open, чтобы открыть URL с новым процессом

Странно, это работает так из коробки на моем Debian. Попробуйте запустить его в фоновом режиме:

Вы можете превратить это в функцию, добавив следующие строки в ваш

Затем вы можете просто запустить, open http://www.google.com и он будет работать в фоновом режиме.

Можно создать псевдоним для этого. Мне нравится detach более, так nohup как по умолчанию закрывает stdin stdout и stderr, поэтому его вызов будет чище.

xdg-open ждет завершения программы Это по замыслу. Если программа является программой текстового режима, она должна оставаться на переднем плане в терминале. Даже если программа с графическим интерфейсом, это поведение полезно в том случае, если xdg-open используется из сценария, и сценарий хочет выполнить что-то после того, как файл был отредактирован (например, отправить новую версию куда-нибудь или иным образом сделать что-то с новой версией).

Если вы не хотите ждать, бегите xdg-open в фоновом режиме. Вы можете запустить любую команду оболочки в фоновом режиме, поставив в конце амперсанд.

С некоторыми программами xdg-open возвращается сразу. На самом деле происходит то, что xdg-open вызывающая программа немедленно возвращается. Обычно это происходит с программами с графическим интерфейсом, которые открывают все файлы в одном экземпляре: когда вы запускаете их второй раз, они посылают сообщение запущенному экземпляру, чтобы сообщить ему об открытии файла, и немедленно завершают работу.

Источник

Как мне установить новую настройку xdg-open?

Я хочу использовать xdg-open для открытия irc:// ссылок, как я могу сделать необходимый параметр?

Gnome использует программу gnome-open, которая использует gconf для хранения всего. Например, на моей машине с Ubuntu 10.10 работает gnome-open irc: // blah открывает xchat, потому что xchat включает в себя патч настройки gconf для добавления обработчика irc: //.

xdg open что такое. Смотреть фото xdg open что такое. Смотреть картинку xdg open что такое. Картинка про xdg open что такое. Фото xdg open что такое

KDE использует kde-open или kfmclient в зависимости от того, что доступно и какая у вас версия KDE.

XFCE использует программу под названием exo-open, у этой программы нет способа сконфигурировать ее или добавить обработчики uri. Просмотр исходного кода показывает, что он использует файлы рабочего стола для указания только трех типов программ. TerminalEmulator, WebBrowser и EmailClient.

В XFCE4 (и, возможно, также в других) можно настроить xdg-open для определения собственного обработчика протокола. В некоторых вы должны создавать / редактировать следующие файлы:

Я опишу это с magnet: типом URI и передачей (т. Е. Битовый поток), но тот же метод можно применить к любой схеме или типу файла.

Узнайте строку типа MIME. Для типов файлов MIME вы можете узнать это с помощью команды file :

Команда фактически означает «список файлов в этом каталоге, которые содержат слово« Transmission »». Некоторые приложения могут быть установлены только для пользователя, в этом случае путь будет

Если у вас есть «странное» приложение, которое может вообще не иметь файла, вы всегда можете создать его (и, возможно, отправить его разработчикам приложения). Легким способом было бы скопировать существующее, переписать поля, которые вы понимаете, и удалить те, которые вы не делаете. Обратитесь к спецификации для деталей.

Сделайте назначение, используя команду xdg-mime :

Обратите внимание, что независимо от того, где файл находится (/ usr / share / Applications,

Примечание 1: Если вы хотите проверить другие типы MIME, вы можете посмотреть /etc/mime.types. Он не содержит все типы в мире; например, обработчики URI, но его можно использовать для «агрессивной» формы обработки ассоциаций. Например:

связал бы все известные видео форматы с VLC.

Источник

Безумие дотфайлов

xdg open что такое. Смотреть фото xdg open что такое. Смотреть картинку xdg open что такое. Картинка про xdg open что такое. Фото xdg open что такоеМы больше не контролируем свои домашние каталоги.

В моём собственном 25 обычных файлов и 144 скрытых. В дотфайлах хранятся данные, которые не принадлежат мне: они принадлежат программистам, чьи программы решили захватить моё пространство, предназначенное для хранения моих личных файлов.

Даже если мы никогда не сможем решить эту проблему — из-за исторического наследия, обратной совместимости, старых версий софта или программистов-злодеев, хранящих файлы, где хотят, просто из вредности — мы можем хоть попытаться следовать вменяемым практикам. Хотя концептуальную ошибку внедрения «скрытых» файлов уже не отменить, можем хотя бы смягчить её последствия.

Эта конкретная проблема замечена и давно решена с созданием Спецификации на расположение базовых каталогов (XDG). Она определяет набор переменных среды, указывающих программам на каталог, в котором должны храниться данные или конфигурация. Эти переменные устанавливает пользователь, так что если они не заданы, программа должна по умолчанию использовать каталог, определённый стандартом, а не домашний каталог пользователя.

Переменные среды пользователя

$XDG_DATA_HOME

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

$XDG_CONFIG_HOME

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

$XDG_CACHE_HOME

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

$XDG_RUNTIME_DIR

$XDG_RUNTIME_DIR определяет каталог, в котором должны храниться несущественные файлы среды выполнения и другие объекты (например, сокеты, именованные каналы. ).

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

Системные переменные

$XDG_CONFIG_DIRS

Этот каталог следует использовать для файлов конфигурации системного уровня. Эту конфигурацию могут переопределить пользовательские файлы конфигурации. Скорее всего, этот каталог используется в процессе установки.

$XDG_DATA_DIRS

Пример: сохранение плагинов или тем, которые используются всеми пользователями. Скорее всего, этот каталог используется в процессе установки.

Как это работает на практике?

Использовать стандарт очень просто. Прочитайте соответствующую переменную, а если она отсутствует, то используйте дефолтные пути, определённые стандартом. Там создайте каталог для программы и храните свои данные.

Вы можете легко перенести существующие программы на использование этого стандарта. Для этого при создании новых файлов начните использовать стандарт, но продолжайте проверять старое расположение файлов при их чтении. Это позволит выполнить миграцию, не нарушая работу программы для пользователей с файлами конфигурации или данными, созданными предыдущей версией программы.

Прочитайте стандарт, чтобы узнать больше и взглянуть на иерархию каталогов, которая почти наверняка уже присутствует в вашем домашнем каталоге. В реальности для вашего языка программирования доступна кросс-платформенная библиотека, позволяющая определить каталог для хранения ваших данных. В Linux и подобных системах эта библиотека наверняка будет использовать Спецификацию на расположение базовых каталогов.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *