LINUX.ORG.RU

Не работает local.d скрипт

 ,


0

1
> rc-update | grep 'local'

local |      default nonetwork
> cat /etc/local.d/layout.start

#!/bin/sh
setxkbmap -layout us,ru -option grp:alt_shift_toggle

Если этот скрипт запускать через source, то всё работает. А если через local(local.d) или openrc(init.d) — не работает.

openrc выдавал Fail с текстом от setxkbmap: «Cannot open display „default display“». Скорее всего, setxkbmap также его и выдает при использовании local, только вывод я хз где прочитать.

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

Почему происходит такая ошибка, ведь этот же скрипт через source работает как положено? В чём разница? Кстати говоря, при запуске и от root, и от user всё работает нормально, если делать через source.


Я не знаком с openrc, но кажется мне, что скрипты в local.d выполняются до запуска иксов. А setxkbmap должен запускаться в иксах. Иначе где он будет настройки менять?

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

Я тоже над этим думал, но нет. Отключал и включал local после запуска иксов — безрезультатно.

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

Видимо, ты немного не в курсе про переменную окружения $DISPLAY, и её предназначении.

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

Я понял что она из себя представляет. Но я не понимаю как всё это связано. Можешь объяснить?

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

В одном случаев setxkbmap запускается с этой переменной в окружении, а в другом — нет. Из local.d запускаются системные вещи, там нет смысла устанавливать DISPLAY, да и не выйдет: на тот момент ещё нет запущенного икс-сервера. Нет вообще никаких гарантий, что он когда-нибудь будет запущен. А если и будет запущен, нет гарантий, что он будет один.

У иксов есть свои механизмы автозапуска приложений. Используй их.

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

Используй их.

Хорошо. Но чисто академический интерес: а как можно «впихнуть» в local нужную мне переменную окружения $DISPLAY? Через /etc/profile или если я помещу DISPLAY=":0" перед самой командой setxkbmap, работать будет? Если учесть, что делается это всё после загрузки иксов.

Я не собираюсь это делать, мне просто интересно

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

если я помещу DISPLAY=":0" перед самой командой setxkbmap, работать будет?

Да, если в одной команде.

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

Ага, а глобальные хранятся в /etc/environment. Я сделал ошибочный вывод из-за устаревшего мануала, походу.

letni ()
Ответ на: комментарий от i-rinat

Только надо export использовать. Но теперь:

No protocol specified 
Cannot open display ":0"
=D
Полагаю, решение рядом. Мало ли, наткнется кто на эту тему.

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

В общем, лучше использовать встроенную x-овую инициализацию, ибо чтоб всё работало, надо очень накостылить.

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

О боже, наконец-то я это сделал. Чтобы Xsession читал ~/.xsession, надо очистить /etc/env.d/90xsession и сделать env-update, в случае Gentoo, если используется xdm

letni ()
Последнее исправление: letni (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.