xdg user dirs что это
Возможны ли алиасы для русскоязычных директорий в linux?
Простой 4 комментария
/.config/user-dirs.dirs меняем/прописываем путь и имя для рабочего стола:
/.bash_profile для bash или
/.zprofile для zsh ну или в другом шеле которым пользуетесь
далее обновляем базу и смотрим верно ли прописалось
$ systemd-path
$ systemd-path user-desktop
потом можно переключить обратно на русскую локаль
в итоге у тебя пути будут на английском,а интерфейс на русском
руссконазваные директории можно удалить
UlyssesD Blog’s
Различные заметки о всем что меня интересует и что я могу.
понедельник, 13 апреля 2015 г.
Я уже затрагивал тему организации каталогов при работе на компьютере с несколькими операционными системами. В Части 1 была затронута тема решения вопроса с применением утилит xdg и затронут краем момент монтирования разделов через редактирование fstab. В Части 2 была предложена схема реализации с применением симлинков.
Эта часть получится как бы итоговой, и в ней я хочу изложить свой взгляд на комфортное обустройство своего рабочего пространства.
Первоначально необходимо определить задачи которые мы будем решать, для этого приведу свою разбивку диска.
Немного отойду от основной темы и остановлюсь на использовании xdg-user-dirs и gtk-bookmarks (этот предварительный этап облегчит дальнейшие настройки и использование).
/.gtk-bookmarks (по умолчанию в Debian Jessie + Mate, Ubuntu Mate 15.04, Manjaro, LMDE2 этот файл отсутствует), я решил его создать сразу т.к. в дальнейшем он мне пригодится, да и при наличии данного файла с записями меню «Переход», смотрится совершенно по другому
file:///home/%user%/Downloads
file:///home/%user%/Documents
file:///home/%user%/Music
file:///home/%user%/Pictures
file:///home/%user%/Videos
Caja поддерживает возможность «drag and drop» при работе с закладками, т.е. любой каталог или файл можно мышкой перетащить на панель и тут же появится закладка.
Про настройку xdg и gtk-bookmarks наверное хватит, все что я для себя планировал я сделал.
Следующей задачей будет подключение дисков и создание симлинков к стандартным каталогам на разные диски.
Для уменьшения (или полного исключения), работы с терминалом воспользуемся пакетами которые нам доступны из стандартных репозитариев или установлены по умолчанию.
Есть такой пакет как gnome-disk-utility.
Написано про него в сети достаточно, я в данному случае буду использовать его исключительно для автоматизации монтирования дисков и сведения к минимуму ручных действий и работы с терминалом, а также к минимуму ковыряния в fstab.
Все эти действия связаны в первую очередь с тем что бы правильно развести использование стандартных каталогов «Документы», «Видео» и пр. между разными разделами с использованием средств утилиты xdg или организации этого с помощью симлинков, это необходимо для обеспечения комфортной работы не зависимо от версии системы которую мы используем (в моем случае после всех этих операций я получу одну и туже удобную систему в Debian Jessie Mate, Ubuntu Mate, Manjaro, LMDE2 и даже немножко в Windows)
Итак начнем.
Сама утилита, в некоторых системах она уже установлена, а там где ее нет установим
$ sudo apt-get install gnome-disk-utility
Безумие дотфайлов
Мы больше не контролируем свои домашние каталоги.
В моём собственном 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 и подобных системах эта библиотека наверняка будет использовать Спецификацию на расположение базовых каталогов.
Переименование папок в домашней директории с кирилицы на латиницу.
Как известно, при установке системы и выборе русского языка как основного в домашней папке пользователя автоматически создаются папки с русскими именами: Рабочий стол, Документы, Картинки, Музыка, Видео, Шаблоны, Общедоступная.
Все бы хорошо, но вот при работе выясняется, что далеко не все программы в состоянии адекватно воспринимать папки на кирилице и по ходу работы может возникнуть много различных, на первый взгляд непонятных глюков. Типа не возможности установить или запустить программу расположенную на рабочем столе. Все это связанно именно с наличием руских букв в пути к файлу. Поэтому для нормальной, безглючной работы нам нужно переименовать папки с кирилицы на латиницу. Правильно делается это следующим образом:
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you’re
# interested in. All local changes will be retained on the next run
# Format is XDG_xxx_DIR=»$HOME/yyy», where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR=»/yyy», where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR=»$HOME/Desktop»
XDG_DOWNLOAD_DIR=»$HOME/Download»
XDG_TEMPLATES_DIR=»$HOME/Templates»
XDG_PUBLICSHARE_DIR=»$HOME/Share»
XDG_DOCUMENTS_DIR=»$HOME/Doc»
XDG_MUSIC_DIR=»$HOME/Music»
XDG_PICTURES_DIR=»$HOME/Pictures»
XDG_VIDEOS_DIR=»$HOME/Video»
Всё как у больших. Автозагрузка приложений в оконных менеджерах linux
Как-то раз, листая сообщения в профильном 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 Ну и, чтоб не копипастить, ссылка на гитхаб.