LINUX.ORG.RU

через rofi на английском

 , , ,


0

1

Система: ArchLinux

Оконный менеджер: i3wm

Если запускаю приложения через терминал (nemo,gvim), то приложения открываются на русском, стоит их запустить через rofi, язык английский. В чем может быть проблоема, запранее благодарен за ответ.

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

Если это так - модифицируй команду запуска нужного софта через rofi с передачей соответствующих переменных окружения.

Вот есть баг, старый, но всё же, он уже грешил этим: https://github.com/davatorium/rofi/issues/955

Возможно его не исправили тогда или вновь появилось.

Не используй всякое непонятное говно.

Вот ещё один баг: https://github.com/davatorium/rofi/discussions/1464

На два года позднее, там есть рекомендации как задавать переменные окружения.

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

Сам погугли в каких переменных окружения задаётся локаль и вообще что это такое.

Это база.

Можно ещё проще, запусти через rofi приложение, как оно запускается, посмотри PID его процесса

ps aux | grep имя_исполняемого_файла

Далее смотри переменные окружения:

cat /proc/<PID>/environ  | strings

или

strings /proc/<PID>/environ

Вместо <PID> - идентификатор процесса.

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

Вот вывод команды:

cat /proc/2500/environ | strings

SHELL=/bin/zsh
I3SOCK=/run/user/1000/i3/ipc-socket.1729
XDG_SEAT=seat0
PWD=/home/sergey
LOGNAME=sergey
XDG_SESSION_TYPE=tty
_=/usr/bin/rofi
XAUTHORITY=/home/sergey/.Xauthority
WINDOWPATH=1
MOTD_SHOWN=pam
HOME=/home/sergey
XDG_SESSION_CLASS=user
TERM=linux
USER=sergey
DISPLAY=:0
SHLVL=1
XDG_VTNR=1
XDG_SESSION_ID=3
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
MAIL=/var/spool/mail/sergey
OLDPWD=/home/sergey

Запустил nemo через rofi. PID nemo 2500.

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

Вижу, не хватает определения локалей.

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

Погугли как задаются локали в Linux через переменные окружения, настрой запуск приложения в rofi с передачей соответствующий переменных окружения. Либо для каждого приложения по отдельности.

Смотри ссылки выше, во второй есть пример, не проверял, если он не работает - смотри в документации как определять переменные окружения для приложений или глобально через rofi.

Ну либо в документации смотри, возможно можно как-то по другому глобально сделать, чтобы rofi передавал нужные переменные.

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

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

Вот вывод той же команды для firefox:

└─[$]> cat /proc/1243/environ | strings
SHELL=/bin/zsh
I3SOCK=/run/user/1000/i3/ipc-socket.548
XDG_SEAT=seat0
PWD=/home/sergey
LOGNAME=sergey
XDG_SESSION_TYPE=tty
_=/usr/bin/rofi
XAUTHORITY=/home/sergey/.Xauthority
WINDOWPATH=1
MOTD_SHOWN=pam
HOME=/home/sergey
XDG_SESSION_CLASS=user
TERM=linux
USER=sergey
DISPLAY=:0
SHLVL=1
XDG_VTNR=1
XDG_SESSION_ID=1
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
MAIL=/var/spool/mail/sergey
OLDPWD=/home/sergey
DESKTOP_STARTUP_ID=rofi/|usr|lib|firefox|firefox/1237-0-sergey_TIME304961

Тут нет переменных отвечающих за язык хотя firefox почему -то на русском.

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

Второй пример где предлагается добавить переменную среды, попробовал вот:

└─[$]> cat .zshenv
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then
  exec startx
fi
export ZSH="$HOME/.oh-my-zsh"
export VISUAL="vim"
export EDITOR="vim"
export SUDO_EDITOR="vim"
export TERMINAL="alacritty"
export ARCHFLAGS="-arch $(uname -m)"
export LANG="ru_RU.UTF-8"
export LC_ALL="ru_RU.UTF-8"
export HOST_HIST_DIR=\"/tmp\"

source "$HOME/.cargo/env"

Переменную HOST_HIST_DIR перезагрузился, результата нет.

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

Смотри, когда ты запускаешь какое-то приложение через SHELL напрямую - SHELL, в твоём случае zsh, передаёт все свои переменные приложения дочернему процессу.

Немного не так, экспортированные или декларированные переменные.

Переменные могут быть ещё локальными только для этого SHELL и далее в дочернем SHELL или процессе видны не будут.

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

Поэтому делать export в оболочке смысла нет, rofi просто не передаёт при вызове дочерних процессов все переменные окружения, что есть у его родителя или у него самого.

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

Читай документацию, смотри ссылку два в моём первом сообщении в теме.

Я rofi не пользуюсь, более сказать ничего не могу. Ставить его ради тебя и ковырять - не собираюсь.

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

Может ты сам сломал в SHELL правильное наследование переменных с определением локали.

Что у тебя в SHELL по локалям?

Смотри вывод:

export
set

Но думается мне - тебе всё же нужно читать документацию по rofi и определять передачу переменных с локалью в его конфиге для каждого запускаемого через него приложения.

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

Вот вывод export:

─[$]> export
ALACRITTY_LOG=/tmp/Alacritty-1551.log
ALACRITTY_SOCKET=/run/user/1000/Alacritty-:0-1551.sock
ALACRITTY_WINDOW_ID=29360131
ARCHFLAGS='-arch x86_64'
COLORTERM=truecolor
DBUS_SESSION_BUS_ADDRESS='unix:path=/run/user/1000/bus'
DISPLAY=:0
EDITOR=vim
HOME=/home/sergey
HOST_HIST_DIR='"/tmp"'
I3SOCK=/run/user/1000/i3/ipc-socket.548
LANG=ru_RU.UTF-8
LC_ALL=ru_RU.UTF-8
LESS=-R
LOGNAME=sergey
LSCOLORS=Gxfxcxdxbxegedabagacad
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.7z=01;31:*.ace=01;31:*.alz=01;31:*.apk=01;31:*.arc=01;31:*.arj=01;31:*.bz=01;31:*.bz2=01;31:*.cab=01;31:*.cpio=01;31:*.crate=01;31:*.deb=01;31:*.drpm=01;31:*.dwm=01;31:*.dz=01;31:*.ear=01;31:*.egg=01;31:*.esd=01;31:*.gz=01;31:*.jar=01;31:*.lha=01;31:*.lrz=01;31:*.lz=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.lzo=01;31:*.pyz=01;31:*.rar=01;31:*.rpm=01;31:*.rz=01;31:*.sar=01;31:*.swm=01;31:*.t7z=01;31:*.tar=01;31:*.taz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tgz=01;31:*.tlz=01;31:*.txz=01;31:*.tz=01;31:*.tzo=01;31:*.tzst=01;31:*.udeb=01;31:*.war=01;31:*.whl=01;31:*.wim=01;31:*.xz=01;31:*.z=01;31:*.zip=01;31:*.zoo=01;31:*.zst=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.jxl=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:'
MAIL=/var/spool/mail/sergey
MOTD_SHOWN=pam
OLDPWD=/home/sergey
PAGER=less
PATH=/home/sergey/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/bin
PWD=/home/sergey
SHELL=/bin/zsh
SHLVL=2
SUDO_EDITOR=vim
TERM=alacritty
TERMINAL=alacritty
USER=sergey
VISUAL=vim
WINDOWID=29360131
WINDOWPATH=1
XAUTHORITY=/home/sergey/.Xauthority
XDG_RUNTIME_DIR=/run/user/1000
XDG_SEAT=seat0
XDG_SESSION_CLASS=user
XDG_SESSION_ID=1
XDG_SESSION_TYPE=tty
XDG_VTNR=1

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

Смотри, я вижу, что ты так и не сходил в гугл или другую поисковую систему и не стал разбираться через какие переменные окружения задаются параметры локали (локализации) в Linux.

Иначе бы не показывал мне весь вывод, иначе либо привёл только нужные переменные или сказал бы, что они заданы.

Я не вижу смысла тебе что-то дальше советовать или писать.

Я тебе уже дал все советы.

Изучай документацию по rofi.

Нужные переменные в окружении SHELL у тебя задаются.

Какие это переменные и собственно передачу каких тебе нужно обеспечить средствами rofi - найдёшь в гугл.

Спрашивай как настраивается локализация, через какие переменные, как определить текущую локаль в Linux.

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

А то, как задаётся локаль, через какие переменные окружения - это база.

Я тебе об этом сказал в первом же сообщении.

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

Удачи.

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

А причем тут локаль в Linux? Эти перменные заданы в .zshenv

LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8

Система на русском, вопрос в том, как передать переменные окружения если это требуется в rofi. Странность в том, что firefox почему -то это не требует, а nemo и gvim видимо требуют.

allon925
() автор топика

А ты само рофи попробуй запускать с переменной окружения:

LANG="ru_RU.UTF-8" rofi

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

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

Вот и изучай документацию по rofi.

За тебя никто её изучать не будет.

В файрфокс параметры языка или локализации считываются из профиля firefox.

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

gvim и прочие приложения опираются на переменные окружения, если у них нет в окружении переменной с определением локали, то они используют локаль «C» на которой все на английском.

Файрфокс - это мульти платформенное приложение и свои настройки хранит в своем профиле, я том числе выбранный язык, а не берет из переменных окружения.

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

В linux / unix из переменных окружения и записывает в свой профиль выбранный язык.

В Windows - из реестра.

Дальше ты можешь поменять.

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

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

Да, если запустить так то работает. Но rofi запускает приложения из: /usr/share/applications .desktop файлы получается там в Exec прописать локаль для каждого приложения?

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

Я не знаю насколько это правильно но я добавил в конфиг i3 вот такую строчку:

bindsym $mod+d exec --no-startup-id LANG=«ru_RU.UTF-8» rofi -show drun

и это работает.

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

Собственно, можно конфиг WM не трогать, а добавить 'export LANG=«ru_RU.UTF-8»' в ~/.xinitrc, если ты для всей системы хочешь...

piyavking ★★★★★
()

Я бы удалил русскую локаль и все. У меня ее нет:

$ grep '^[^#]' /etc/locale.gen
en_US.UTF-8 UTF-8  
dmitry237 ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.