Вы пропустили переменную окружения $DISPLAY
. Он устанавливается первым процессом, который инициализирует ваш сеанс GUI, а затем наследуется всеми его дочерними процессами. Для локального сеанса X11 значение обычно равно :0
.
Переменная $DISPLAY
сообщает приложениям X11, как обращаться к X-серверу; значение :0
говорит им использовать локальный сокет Unix по адресу /tmp/.X11-unix/X0
. После первоначального подключения можно активировать высокопроизводительные методы доступа, такие как инфраструктура прямого рендеринга (DRI ).
Задания Cron не получают переменную $DISPLAY
автоматически, потому что они должны выполняться независимо от сеанса GUI. :Что, если владелец задания в данный момент не вошел в систему? Если бы задание cron могло просто получить доступ к любому сеансу X11, это позволило бы пользователям шпионить друг за другом, а это совершенно неприемлемо.
В зависимости от используемого вами дистрибутива вам также может потребоваться установить переменную среды $XAUTHORITY
. Без него все инструменты и приложения X11 будут предполагать, что файл cookie сеанса X11 расположен по адресу $HOME/.Xauthority
, но, например, Debian 10 создает личные каталоги $TMP
для каждого пользователя, поэтому $TMP
будет установлено на /tmp/user/<user's UID number>
. ] и $XAUTHORITY
будут установлены на $TMP/xauth-<user's UID number>-_0
для DISPLAY :0
.
Без доступа к правильному файлу cookie сеанса X11 сервер X11 не будет отвечать на запросы, даже для root. Запуск программ с графическим интерфейсом после входа в систему в качестве обычного пользователя и последующего использования su
или sudo
, чтобы стать пользователем root, возможен тогда и только тогда, когда$DISPLAY
(и $XAUTHORITY
, при необходимости ), передаются пользователю su
. ] / sudo
сеанс -, который часто устанавливается по умолчанию.
$ echo 'signal[3]_and_[31]' | awk -F'[][]' '{ print "signal[" $2 ":0]_and_[" $4 ":0]"; }'
signal[3:0]_and_[31:0]
Предполагая, что одна строка на бит переданного сигнала nane, мы запускаем следующий код Perl и преобразуем его в соответствующую нотацию шины.
perl -MList::Util=max,min -lne '
BEGIN {
$sig_re = qr/signal\[(\d+)]_and_\[(\d+)]/;
$bus_fmt = q/signal[%d:%d]_and_[%d:%d]/;
}
/^$sig_re$/ and push(@A,$1), push(@B,$2);
print(sprintf($bus_fmt,
max(@A), min(@A),
max(@B), min(@B)))
if eof;
' signals.bit_blasted > signals.bussed