LINUX.ORG.RU

Как пробросить PATH в dwm?

 ,


0

1

В dmenu выполняем:

echo $PATH > /tmp/zzz

out:

cat /tmp/zzz

/usr/local/bin:/usr/bin:/bin:/usr/games


Как видим, PATH  мы не получили(оригинальный PATH у меня(команду ввожу в терминале))

echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games:/home/user/Android/Sdk/emulator:/home/user/Android/Sdk/tools:/sbin:/home/user/.config/myconfig/home/user/pomo:/home/user/myscript/ssh:/usr/local/go/bin:/home/user/.local/bin:/usr/lib/jvm/java-17-openjdk-amd64/bin:/home/user/.golang/bin


Использую xdm. Получается так, что xdm не получает PATH, который не попадает при старте dwm. Как это правильно сделать(прокинуть PATH в dwm)?
★★★

Последнее исправление: serg002 (всего исправлений: 1)

Ответ на: комментарий от dmitry237

Он вроде там не применяется. По идее .profile это для логин-шеллов, а дисплей менеджер никакие логин шеллы не создаёт, сразу запускает wm. Хотя я не проверял - может и не прав.

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

У меня lightdm, он загружает ~/.profile. Вот весь мой .xsession:

$ cat ~/.xsession
#!/bin/sh

#
# ~/.xsession
#
# Executed by xdm/gdm/kdm at login

Еще возможно в ~/.xinitrc, если startx.

dmitry237 ★★★★
()
Последнее исправление: dmitry237 (всего исправлений: 2)

Это же dwm там на любой чих его перекомпиляция и это нормально, зашей в сам dwm

setenv("PATH","/usr/local/bin:/usr/bin:/bin:/usr/games:"
              "/home/user/Android/Sdk/emulator:/home/us"
              "er/Android/Sdk/tools:/sbin:/home/user/.c"
              "onfig/myconfig/home/user/pomo:/home/user"
              "/myscript/ssh:/usr/local/go/bin:/home/us"
              "er/.local/bin:/usr/lib/jvm/java-17-openj"
              "dk-amd64/bin:/home/user/.golang/bin",1);

Или тоже самое, но с чтением из файлика. Или в .xinitrc прописать.
Но я не помню, оно будет так работать или нет.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от anonymous

Если вставить как есть wrap в редакторе покажет туже самую кашу.
А если wrap нет то до уедет на километр влево. Разделять пути прям строка на путь, нет смысла этож не для правки. А если нужно добавить путь, то он дописывается в конец. На уровне кода, конкретно вот эта какашка с путями считай просто блоб просто не размазанный, а собранный в кучку. Если же предполагается добавлять, удалять пути руками по отдельности, тогда да, надо отформатировать по строка-путь. А если нет (а оно так и есть) то не надо, так что зря ты ругаешься Антошка!

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от firkax

cat ~/.xsession

Dwm ()
{
    echo $PATH /tmp/zzz  # <-- вот тут уже нет нормального PATH, потому что xdm, который запускает сессию, не получает user $PATH
    exec dbus-launch --sh-syntax --exit-with-session dwm 2> ~/.dwm/dwm.log
}
serg002 ★★★
() автор топика
Ответ на: комментарий от serg002

Экспортируй не дефолтный а тот который тебе нужен. Ну сколько тебе раз ещё повторить это? Зачем ты туда echo всунул я не знаю, и так ясно что там будет дефолт - потому что ты его не менял.

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

Я сделал так: cat ~/.config/bashrc-modules/modules/os/common/path.sh

function user-os-path-activate() {
# # PATH=$(getconf PATH)
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
# далее добавил всё, что дополняет path
}
export -f user-os-path-activate

далее в ~/.xsession
```bash
if [[ -f "${PROFILE_USER_BASHRC_MODULES}/modules/oc/common/path.sh" ]]; then
        source "${PROFILE_USER_BASHRC_MODULES}/modules/oc/common/path.sh"
fi

И непосредственно в 
function Dwm()
{
[[ "$(declare -Ff user-os-path-activate 2>/dev/null)" ]] && user-os-path-activate
    exec dbus-launch --sh-syntax --exit-with-session dwm 2> ~/.dwm/dwm.log
}

Эту же функцию я дёргаю и в bashrc. Всё в принципе работает, но тут есть вопросы

  1. после загрузки dwm, изменить PATH в dwm нельзя. Получается так, что он раз загрузил PATH и всё. Как бы сделать так, чтобы можно было в текущей сессии всё-таки PATH менять? Сейчас у меня есть способ, который я делаю для программ, которым нужен был PATH(до применения способа в .xsession), так: я создал функцию, которая в файл записывает PATH, а саму программу запускаю из скрипта(через кастомное меню dmenu), в которой читаю из этого файла PATH и передаю их таргет программе. Может это как-то можно сделать без этого костыля и всё это можно динамически менять через вариант .xsession?

  2. чтобы не дублировать PATH при каждом запуске терминала, я делаю

# # PATH=$(getconf PATH)
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"

Но, думаю - это не совсем правильно. Может это делать закомменченной строкой? Насколько это кроссдистрибутивно?

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

я ничего не читал и не понял. Вставь в .profile export PATH=/your/path:/your/another/path:$PATH

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

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

То есть, теперь ты понял, почему в дефолтный PATH не лепят всякую лапшу.

Всякую шнягу лепят конкретно там, где эта дребедень нужна. Чтобы потом не заниматься вырезанием, ранее бестолково врезанного.

andytux ★★★★★
()

Как пробросить PATH в dwm?

читаю man 8 xdm, выходит что никак не пробросить. Можно только задать в конфиге уже готовые значения DisplayManager.DISPLAY.userPath и DisplayManager.DISPLAY.systemPath.

Ну что можно сказать, не пользуйтесь подобной тухлятиной.

Lrrr ★★★★★
()