Debian: Как разрешить отказ Xserver

Много терминалов поддерживают escape-последовательности, которые устанавливают позиции табуляции. Возможность имеет даже запись в terminfo (5): tbc (очищают все вкладки), и hts (горизонтальный набор вкладки).

$ tput tbc; echo aaaaaaaaaaaaaaaaaaaaa$(tput hts); echo 'a\tb'
aaaaaaaaaaaaaaaaaaaaa
a                    b

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

Так, для установки позиций табуляции, каждых 4 colums, нам нужно:

tbc=$(tput tbc) hts=$(tput hts) cuf4=$(tput cuf 4)
printf '%s\r' "$tbc"
i=4
while [ "$i" -lt "$COLUMNS" ]; do
  printf %s "$cuf4$hts"
  i=$(($i + 4))
done
printf '\r'

Или можно также установить позиции табуляции в неправильных интервалах. Выше мы использовали "tput cuf" для перемещения курсора вперед, в то время как в первом примере мы использовали "aaaa". Можно сделать:

printf '\r%s' "${tbc}aaaa${hts}aaaaa${hts}aaaaaaaa${hts}"

установить одну позицию табуляции в 4-м столбце, затем следующий, на 5 столбцов далее...

1
16.01.2014, 01:28
2 ответа

Похоже, что Вы не изменили свое значение по умолчанию runlevel, и X-сервер уже работает. Необходимо было установить его на 3, т.е.:

id:3:initdefault:

Хотя я не думаю, что Ваш сценарий собирается работать так или иначе. Эта часть:

cd /home/user1/Documents/ProgramFile
./ myProgram.sh

будет выполняемым только после остановленного X-сервера.

1
27.01.2020, 23:38
  • 1
    , я изменил уровень выполнения по умолчанию в /etc/inittab и теперь мое поле загружается к GUI для корня. Если я открываю терминал затем, я получаю то же сообщение об ошибке как выше, и моя программа все еще выполняется. Вы знаете, как я мог пойти о первой части, измененной в bash.bashrc? –  fifamaniac04 16.01.2014, 17:52

Ваш сценарий не проверяет, работает ли X уже.
Обходное решение:

if [ -e /tmp/.X0-lock ]; then
   XPID=$(cat /tmp/.X0-lock)
   if ps -p $XPID >/dev/null; then
      echo "X already running"
   else
      rm /tmp/.X0-lock
      startx
   fi
fi

cd /home/user1/Documents/ProgramFile
./myProgram.sh

Однако я сделал бы что-то вроде этого:

# /etc/inittab
3:2345:respawn:/bin/login -f username tty3 < /dev/tty3 > /dev/tty3 2>&1

и

# /home/username/.bashrc
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty3 ]; then
  startx -- :0  -quiet -logverbose 11
  cd /mydir
  ./myprog
fi

Таким образом, Вы порождаете автоматически оболочку на tty3. Принятие удара является Вашей текущей оболочкой, проверки удара, если это работает на tty3, затем это выполняет Ваш материал.

1
27.01.2020, 23:38

Теги

Похожие вопросы