LINUX.ORG.RU

XDG Base Directory Specification, даже когда софт не хочет.

 


38

5

Довольно давно меня подзадолбала мусорка в домашней директории, постепенно получилось заставить почти весь софт гадить в строго определенное место, а именно в .config, .cache и .local

Для особо одаренных (Skype, Dropbox) пришлось слегка поизвращаться, если для Skype достаточно было изменить параметр запуска на

skype --dbpath=$HOME/.local/share/skype
, то для Dropbox уже пришлось городить костыль в виде

HOME=$HOME/.local/share/dropbox /usr/bin/dropbox start -i 2>&1

Остальной софт относительно разумен, где через alias, где через export, удалось обяснить, куда складировать свое добро. Ниже листинг .bashrc и .profile, авось кому пригодится.

.bashrc

...
HISTFILESIZE=2000
HISTSIZE=10000
HISTFILE=~/.cache/bash_history

alias mcabber="mcabber -f $HOME/.config/mcabber/mcabberrc"
alias irssi="irssi --config=$HOME/.config/irssi/config --home=$HOME/.config/irssi"
alias vim="vim -u $HOME/.local/share/vim/vimrc"
alias vimdiff="vimfiff -u $HOME/.local/share/vim/vimrc"
...

.profile

...
# COMMON
export PAGER=most
export EDITOR=vim
export TERM=xterm-256color

# RC
export COMPOSER_HOME=$HOME/.cache/composer
export GNUPGHOME=$HOME/.config/gnupg
export GEMRC=$HOME/.local/lib/ruby/gem/gemrc
export GEM_HOME=$HOME/.local/lib/ruby/gem
export GEM_SPEC_CACHE=$GEM_HOME/specs
export MYSQL_HISTFILE=$HOME/.cache/mysql_history
export MYSQL_HOME=$HOME/.config/mysql
export GTK_RC_FILES=$GTK_RC_FILES:$HOME/.config/gtk/gtkrc
export GTK2_RC_FILES=$GTK2_RC_FILES:$HOME/.config/gtk-2.0/gtkrc

# LOCAL PATHS
export PATH=$PATH:$HOME/.local/bin

# APPS
export MPLAYER_HOME=$HOME/.config/mplayer
export GIMP2_DIRECTORY=$HOME/.local/share/gimp-2.8

# BASH
export PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[01;33m\]$(__git_ps1)\[\033[01;34m\] \$\[\033[00m\] » '
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWSTASHSTATE=1
export GIT_PS1_SHOWUPSTREAM=1
export GIT_PS1_SHOWUNTRACKEDFILES=1

# KDE
export KDEHOME=$HOME/.config/kde
export KWIN_TRIPLE_BUFFER=1

# NVIDIA
export __GL_SHADER_DISK_CACHE_PATH=$HOME/.cache
export __GL_YIELD="USLEEP"
...

Тут не присутствуют правила для софта, который, хоть по умолчанию и ищет конфиги в корне хомяка, но, тем не менее, умеет искать и в правильных местах, например git, для него достаточно содать файл $HOME/.config/git/config, и он его радостно скушает. Директории fonts, icons и themes уже довольно давно можно спокойно складировать в $HOME/.local/share. Ну и с помощью $HOME/.config/user-dirs.dirs можно поубирать куда-нибудь с глаз лишние директории, которые любят создавать DE:

XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="/opt/media/Music"
XDG_PICTURES_DIR="/opt/media/Pictures"
XDG_VIDEOS_DIR="/opt/media/Videos"
XDG_TEMPLATES_DIR="$HOME/Documents/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Documents/Public"

В силу использования KDE/KDM в текущий момент, выхлоп xsession-errors и dmrc перенаправил в /tmp путем правки /etc/kde4/kdm/kdmrc и /etc/kde4/kdm/Xsession.

>>> Просмотр (749x517, 36 Kb)

★★★★

Проверено: JB ()
Последнее исправление: JB (всего исправлений: 2)
Ответ на: комментарий от xaizek

Меня убило, что элементарное make && ./program не работает

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

fang90 ★★★★★
()
Ответ на: комментарий от gwinn

Пробовал, на связке кеды+Jessie не взлетело

Кеды с kdm, я так полагаю. Я предполагаю, что для kdm особый путь какой-то есть. Вот, что нашел:

https://docs.kde.org/stable/en/kde-workspace/kdm/kdm-files.html

Это типа конфигурации kdmrc. Надо проверить.

UserAuthDir
-----------

    When kdm is unable to write to the usual user authorization 
file ($HOME/.Xauthority), it creates a unique file name in this 
directory and points the environment variable XAUTHORITY at the 
created file.

    The default is “/tmp”.

ForceUserAuthDir
----------------
    If true, UserAuthDir will be used unconditionally.

    The default is “false”.

Что-то типа:

[X-*-Core]
UserAuthDir=/твоя/директория
ForceUserAuthDir=true
Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от gwinn

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

Deleted
()
Ответ на: комментарий от Deleted

А почему бы просто не оставить все как есть? Все равно они все с точки начинаются. Ну или дождаться, когда в твоем дистрибутиве все будет в .config.

На мой взгляд, плохо, когда есть и ~/\. и ~/.config, а ~/.config/openbox/autostart.sh намного хуже, чем ~/.openbox-autostart.sh.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Свои данные нужно хранить на отдельном разделе, никак не связанном с hier.

MiniRoboDancer ★☆
()

Да, перфекционизм, уважаю. Хочется взять и... протолкнуть в апстрим всех дистрибутивов сразу. Еще что-то с заглавными буквами в ~/Music ~/Desktop etc. сделать бы, наркоманы приняли стандарт же.

Deleted
()
Ответ на: комментарий от Zubok

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

gwinn ★★★★
() автор топика
Ответ на: комментарий от gwinn

Хотя таки не совсем, пустой .Xauthority все равно создается

А проверь, когда он создается. Сотри его, залогинься и глянь. А то есть какой-то похожий заведенный баг, что этот файл появляется при разлогине, что ли.

https://bugzilla.redhat.com/show_bug.cgi?id=567914 (см. каменты)

https://bugs.kde.org/show_bug.cgi?id=242065

И еще для для полноты картины: есть параметр AuthDir в секции [General]. Может, его прописать тоже (у самого нет ни KDE, ни KDM).

Zubok ★★★★★
()
Ответ на: комментарий от intelfx

Надо в ядро добавить инит и управлялку сервисами. Достало это костылестроение с systemd и прочим гуано.

devl547 ★★★★★
()
Ответ на: комментарий от Zubok

Создается действительно при разлогинивании, AuthDir прописал сразу.

gwinn ★★★★
() автор топика
Ответ на: комментарий от gwinn

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

И вроде был пофикшен в Fedora, но в апстриме не пофикшен до сих пор, как я понял (раз уж он в тестинге проявляется). Workaround: в скрипте при логине сделать явное удаление этого файла из $HOME и где-нибудь пометить себе, чтобы потом не забыть.

Можно в Debian баг завести.

Zubok ★★★★★
()
Ответ на: комментарий от gwinn

Можно в принципе, хотя не уверен, что мэйнтейнеры пакетов будут заморачиваться.

Тут все зависит, конечно, от сопровождающего. Например, два моих коротких патча к IceWM в Debian прикладываются, а до апстрима они не дошли, а еще один патч апстрим забрал к себе. Ситуация, когда у Debian свой патчсет, не такая редкая. Ну, можно и переоткрыть баги в апстриме, если они уже закрыты, или добавить vote.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
alias vim="vim -u $HOME/.local/share/vim/vimrc"
alias vimdiff="vimfiff -u $HOME/.local/share/vim/vimrc"

Я тоже стати такой изврат точил в своё время. По вот этому --> короче если так делать, то к примеру mc не видит конфига вима и загружает дефолтный вим без конфига.

bryak ★★★★
()

О, уважаемый! А Вы бы подробнее рассказали как шаманили. Я вот например совершенно не могу заставить firefox работать в XDG_CONFIG_HOME, упорно требует ~/.mozilla/firefox. Причем и firefox-bin, и firefox (Gentoo). Но допускаю, что это у меня руки не оттуда, потому как время от времени у меня появляется ~/fontconfig/ с кешами.

FreeOne
()
Ответ на: комментарий от FreeOne

Можно только профили перенести, но их список останется в ~/.mozilla/firefox

Хотя если запускать с ключом -profile, то можно и без этого каталога.

Gotf ★★★
()
Последнее исправление: Gotf (всего исправлений: 1)
Ответ на: комментарий от FreeOne

С мозиллой беда, XDG она поддерживает, тот же кеш лежит там где ему положено, в корне хомяка лежит профайл, Gotf уже сказал, что его можно перенести с помощью ключа -p, но иногда все равно создается пустая директория .mozilla.

gwinn ★★★★
() автор топика
Последнее исправление: gwinn (всего исправлений: 1)
Ответ на: комментарий от Gotf

Насчет VIMINIT спасибо.

.irbrc - конфигурялка для интерактивного ruby shell, увы, путь к ней как и к .netrc жестко к корню хомяка прибит.

gwinn ★★★★
() автор топика
Ответ на: комментарий от FreeOne

C fontconfig тоже пляски, он должен генериться в ~/.cache, но некоторые приложения так не считают, надо просто разобраться, кто гадит в корень.

gwinn ★★★★
() автор топика
15 ноября 2014 г.

По моему было бы супершикарно запилить страницу на вики, чтобы все могли её дополнять в будующем и было легко найти?

GanGSISoft ★★
()
Ответ на: комментарий от GanGSISoft

Хз, перфекционизмом не многие болеют.

gwinn ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.