(EE) Не удается установить прослушивающие сокеты - Убедитесь, что X-сервер еще не запущен (EE) fixme: exec: SHELL_execute флаги игнорируются:
Либо Xfvb (или другой X-сервер) уже запущен на дисплее: 1, либо остались некоторые файлы блокировки от предыдущего запуска.
См. ls -l /tmp/.X*
и посмотрите свой список процессов ps aux | grep -i xvfb
.
Если запущен другой X, вы можете его убить.Или вручную удалите файлы блокировки X1 *
. Или выберите другой дисплей Xvfb ( Xvfb: 123
).
Ваш стартовый скрипт должен убивать X-сервер при выходе. В противном случае вы также можете повторно использовать сеанс Xvfb, если он уже запущен.
FYI У меня есть такой Xvfb / wine
скрипт, работающий в производственной среде. Хотя он и не идеален, он всегда запускается без каких-либо проблем с годами через cron. Вот он:
#!/bin/bash
VNC_PORT=29
export DISPLAY=":${VNC_PORT}.0"
/usr/bin/Xvfb :${VNC_PORT} -screen 0 1024x768x8 -fbdir /var/tmp &
XVFB_PID=$!
# waiting for XServer established (or failure)
sleep 1
if test "${XVFB_PID}" != "$(jobs -p)" ;then
echo "error, Xvfb failed"
exit 1
fi
/usr/bin/wine **your command**
RET=$?
echo "wine returned '$RET'"
# waiting for shutdown all wine stuff completely
sleep 2
kill $XVFB_PID
exit $RET
Неудобный способ проверить, является ли PS1
значением по умолчанию для bash
или оно было настроено пользователем в~/.bashrc
(или в любом из файлов /etc/profile
, /etc/profile.d/*
или ~/.bash_profile
. в случае оболочки входа ).
В первом случае PS1
будет установлено на уродливое и раздражающее [user@host last_path_elem]$
; в последнем случае он останется как есть.
Обратите внимание, что в RedHat /etc/bashrc
явно получен из ~/.bashrc
по умолчанию, а ~/.bash_profile
установлен из /etc/skel
; не путайте /etc/bashrc
с /etc/bash.bashrc
, источник которого предшествует ~/.bashrc
в некоторых системах (, например. Дебиан).
Я полагаю, что сравнение проверяет, является ли оболочка интерактивным сеансом. \s-\v$
, так как переменная $PS1 оценивается как bash-5.0$
на моей машине. См. различия здесь:
Jonathans-Air:~ lirum$ bash
bash-5.0$ echo "$PS1"
\s-\v\$
bash-5.0$ exit
exit
Jonathans-Air:~ lirum$ echo "$PS1"
\h:\W \u\$
\s-\v\$␣
— это строка приглашения по умолчанию , которую Bash устанавливает при интерактивном запуске с неустановленным PS1
.Он показывает базовое имя процесса оболочки (, обычно bash
или sh
), версию и знак доллара, например. bash-4.4$
. (Или #
вместо $
при работе от имени пользователя root.)
Идея заключается в том, чтобы установить более полезную подсказку, но не в том случае, если она уже установлена в каком-то другом файле запуска.
Обратная косая черта удваивается в "\\s-\\v\\\$ "
, так как в двойных -кавычках строка \x
имеет особое значение для некоторых значений x
. \\
однозначно представляет буквальную обратную косую черту. (Хотя по какой-то причине они не сделали этого на стороне присваивания ).
Использование строк в одинарных кавычках упростило бы чтение обратной косой черты:
[ "$PS1" = '\s-\v\$ ' ] && PS1='[\u@\h \W]\$ '
Выполняемая проверка представляет собой сравнение строк =
. Он сравнивает значение $PS1 со строкой \s-\v\$
, где обратную косую черту необходимо экранировать в строке, чтобы их можно было сравнить с фактическими обратными косыми чертами, а не пытаться экранировать следующий символ.
Синтаксис &&
— это часть, которая устанавливает PS1, только если предыдущий тест прошел успешно.
Общая логика здесь, по-видимому, заключается в обновлении PS1 только в том случае, если ранее для него было установлено определенное значение.
( Я обдумывал, стоит ли сделать это ответом, так как это такая добыча, но вот...)
Просто теория, но первая форма (e.g.bash-3.2.1$
)выглядит как подсказка, которую я часто вижу при входе в систему как пользователь root или под другой учетной записью «не -пользователь». Вторая, доминирующая форма (, например.[joeblow@myhost /tmp]$
)больше ориентирован на пользователя -. Так что, возможно, это нужно для обнаружения при переходе от системной учетной записи к учетной записи пользователя... затем и только тогда перейти к более подходящей подсказке. В противном случае предположим, что кто-то захочет сохранить текущую подсказку.