Как использовать fbi из службы systemd

Следуя meuh предложению, я запустил Python с straceи посмотрел на различия между интерактивным и не-интерактивным Python.

Interactive Python прочитал мой ~/.inputrc, так как он использует readline , и это был файл, который вызывал Segmentation fault (core dumped).

У меня был ~/.inputrc, который пришел с другой машины (Ubuntu ), и внутри него я слепо скопировал содержимое (Ubuntu)/usr/share/doc/bash/inputrc.arrows.

Содержимое /usr/share/doc/bash/inputrc.arrows::

# This file controls the behaviour of line input editing for
# programs that use the Gnu Readline library.
#
# Arrow keys in keypad mode
#
"\C-[OD"        backward-char
"\C-[OC"        forward-char
"\C-[OA"        previous-history
"\C-[OB"        next-history
#
# Arrow keys in ANSI mode
#
"\C-[[D"        backward-char
"\C-[[C"        forward-char
"\C-[[A"        previous-history
"\C-[[B"        next-history
#
# Arrow keys in 8 bit keypad mode
#
"\C-M-OD"       backward-char
"\C-M-OC"       forward-char
"\C-M-OA"       previous-history
"\C-M-OB"       next-history
#
# Arrow keys in 8 bit ANSI mode
#
"\C-M-[D"       backward-char
"\C-M-[C"       forward-char
"\C-M-[A"       previous-history
"\C-M-[B"       next-history

8 bit keypad modeи 8 bit ANSI modeбыли конкретной причиной проблемы, поэтому после их удаления все работает нормально.

Спасибо thrig за то, что он указал мне на gdbи проявил достаточно терпения, так как я никогда раньше не пользовался этим инструментом. То же самое с meuh , который предложил использовать strace, что также было для меня новым. Я понятия не имел, с чего начать отладку, так как я всего лишь случайный пользователь, которому нравится узнавать что-то новое. Отличное сообщество!

2
08.08.2019, 01:38
1 ответ

Отсутствует параметр -d /dev/fb0, указывающий на фактическое устройство кадрового буфера. Кстати, я пытаюсь заставить работать опцию -T 1прямо сейчас, но она терпит неудачу независимо от того, что я делаю. Существует еще один ответ на вопрос fbi, в котором говорится, что «если виртуальный терминал не указан, /dev/consoleиспользуется». (Я отредактирую это, если заставлю -Tработать из systemd)

Следующее работает (для отображения изображения )как службы systemdи было найдено в/etc/systemd/system/splashscreen.service:

[Unit]
Description=Splash screen
DefaultDependencies=no
After=local-fs.target

[Service]
#ExecStart=/usr/bin/fbi --noverbose -d -T 1 /dev/fb0 -t 60 -a -l /path/to/some/images.lst
ExecStart=/usr/bin/fbi --noverbose -d /dev/fb0 -t 60 -a -l /path/to/some/images.lst
#ExecStart=/usr/bin/fbi --noverbose -d /dev/fb0 -a /path/to/some/image.png
StandardInput=tty
StandardOutput=tty
#TTYPath=/dev/tty1

[Install]
WantedBy=sysinit.target

Строки #— это то, что я тестирую, и 2-я, и 3-я строки ExecStartбудут отображать изображение.

Если вы переключитесь с (виртуальной консоли загрузки по умолчанию ), вы потеряете вывод кадрового буфера (экран будет пустым/черным ), хотя ввод с клавиатуры по-прежнему работает(qдля выхода -проверено с помощью psиsystemctl). Я предполагаю, что если вы не отключитесь, все будет работать, как и ожидалось, но я не могу проверить, что банкомат, поскольку ОС, из которой он исходит, запускает виртуальную машину в качестве своей основной ОС, которая по умолчанию открывается на другом терминале., и который также использует устройство фреймбуфера.

1
25.05.2020, 12:59

Теги

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