LINUX.ORG.RU

dmenu коряво запускает приложения.

 , , , .xsession


0

1

Начнём с начала.
Вот если запустить имакс, открыть файлик hello-world, написать туда фразу «Привет мир!», сохранить и закрыть. То это даёт нам большую почву для зармышлений на тему: «Почему в терминале запущенном из dmenu он отображается некоректно, а из другого bash всё работает?»

Вызываем команду из dmenu:

sakura -x '/bin/zsh'

% cat hello-world 
������������ ������!

Вызываем команду из другого bash:

$ sakura -x '/bin/zsh'
% cat hello-world 
Привет мир!
Тоже самое творится с urxvt и запущенном в нем bash. Как его лечить?

Далее имеется непонятная ересь с переменной $PATH приложений запускаемых из dmenu. Пути добавленные в .bashrc и .bash_profile не работают из него. В том же имаксе 'exec-path ничего не видет кроме системных. Пофиксилось добавление путей внутри .xsession. Ниже конфиги для полноты.

.xsession

#!/bin/sh

export PATH=$PATH:$HOME/bin

xsetroot -cursor_name left_ptr

setxkbmap -layout 'us,ru(winkeys)' -model pc105 -option grp:caps_toggle,grp_led:caps

while xsetroot -name "`date`"
do
	sleep 1
done &

feh --bg-scale wallpaper.jpg &

/home/proofit404/bin/dwm

.Xdefaults

*font: -*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*
*boldFont: -*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*

URxvt*foreground: #000000
URxvt*background: #EEE9E9
URxvt*scrollBar: false

.bash_profile

[[ -f ~/.bashrc ]] && . ~/.bashrc

.bashrc

if [[ $- != *i* ]] ; then
	return
fi

export LANG="en_US.UTF-8"
export LC_COLLATE="C"

### Nyan-cat prompt.

PS1="\`if [ \$? = 0 ]; then echo \[\e[35m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\` \$ "

A dmenu у тебя точно bash использует, а не posix shell?

olibjerd ★★★★★
()

.xsession

#!/bin/sh

Значит, у тебя при логине не задано практически ничего.

If Bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well.

When invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first attempts to read and execute commands from /etc/profile and ~/.profile, in that order. The --noprofile option may be used to inhibit this behavior. When invoked as an interactive shell with the name sh, Bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as sh does not attempt to read and execute commands from any other startup files, the --rcfile option has no effect. A non-interactive shell invoked with the name sh does not attempt to read any other startup files.

x3al ★★★★★
()

-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*

мне вот это не нравится, може так лучше будет?

-*-terminus-medium-r-*-*-16-*-*-*-*-*-iso10646-*

lazyklimm ★★★★★
()

.bashrc
-x '/bin/zsh'

This. dmenu не использует bash, я не уверен даже, использует ли он sh.
Устанавливай локаль перед запуском системы, например.

quantum-troll ★★★★★
()

Коротко о том, что происходит:

1. Система грузится, запускается твой DM. Он читает /etc/profile* и успокаивается на этом. Там про локаль нет ничего.

2. Твой DM запускает .xsession

2.1 Запускается bash как non-interactive login shell, да ещё и по симлинку к sh, читает /etc/profile*, не находит ~/.profile (в котором должно быть всё, что ты хочешь задать для своего сеанса глобально). Локаль не задана, а стоило бы.

3. dmenu_launch запускается как non-interactive shell, да ещё и sh. Не читает ничего. Наследует то, что было в 2.1. Локаль не задана.

4. Запускается zsh, которому чихать на ~/.bash*. В ~/.profile, опять же, ничего нет. Есть ещё $ENV, но он тоже не задан. Локаль пустая.

В случае с другим bash читается ~/.bashrc, следовательно, в его потомках локаль задана.

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

Впрочем, в пункте 3 не уверен. dmenu_launch давно переписывали с bash-скрипта на эльф, возможно, таки переписали.

x3al ★★★★★
()
$ cat ~/.profile
export PATH=$PATH:$HOME/bin

export LANG="en_US.UTF-8"
export LC_COLLATE="C"

Всем огромное спасибо, нанодесу!

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