У меня есть экран OLED на моем ноутбуке, который я настроил для проявления информации о статусе. Формирователь тока, который я установил в Linux для него, может отобразить сообщения путем отправки им в сценарий как аргумент, разделенный пробелами.
Пример: команда /opt/asusg50oled/utils/notify.sh Hi Everybody "Hello World"
дисплеи на экране OLED:
Hi
Everybody
Hello World
Если другое сообщение отправляется, прежде чем старые исчезают, и оно возвращается к информации о состоянии, оно отодвигает главное сообщение. Пример: спустя меньше чем 30 секунд после предыдущего примера, /opt/asusg50oled/utils/notify.sh "Bananas have potassium"
выполняется:
Everybody
Hello World
Bananas have potassium
То, что я хочу сделать, имеют сообщения ядра (вид, который Вы видите путем выполнения dmesg
) переданный этому сценарию. Например, когда я вставляю Карту памяти, следующая информация показала бы на экране OLED, поскольку они зарегистрированы:
[ 1283.200150] usb 2-4: new high speed USB device using ehci_hcd and address 4
[ 1283.353322] scsi9 : usb-storage 2-4:1.0
[ 1284.351366] scsi 9:0:0:0: Direct-Access SanDisk Cruzer 1.03 PQ: 0 ANSI: 2
[ 1284.352697] sd 9:0:0:0: Attached scsi generic sg4 type 0
[ 1284.355669] sd 9:0:0:0: [sdd] 31266816 512-byte logical blocks: (16.0 GB/14.9 GiB)
[ 1284.357032] sd 9:0:0:0: [sdd] Write Protect is off
[ 1284.357041] sd 9:0:0:0: [sdd] Mode Sense: 03 00 00 00
[ 1284.357047] sd 9:0:0:0: [sdd] Assuming drive cache: write through
[ 1284.364356] sd 9:0:0:0: [sdd] Assuming drive cache: write through
[ 1284.364371] sdd: sdd1
[ 1284.371656] sd 9:0:0:0: [sdd] Assuming drive cache: write through
[ 1284.371666] sd 9:0:0:0: [sdd] Attached SCSI removable disk
Обратите внимание, что, учитывая ограниченную ширину экрана, разделяя метки времени также было бы полезно. Таким образом в конце входа, экран показал бы в течение приблизительно 30 секунд:
sdd: sdd1
sd 9:0:0:0: [sdd] Assuming drive cache: write through
sd 9:0:0:0: [sdd] Attached SCSI removable disk
Так, для разъяснения я хочу, чтобы сообщения ядра были отправлены живой путем выполнения /opt/asusg50oled/utils/notify.sh "$MESSAGE"
Я могу добавить фильтры для избавлений от чего-либо, что я не хочу видеть позже, я просто хочу знать, как внести свой вклад упомянутый выше. Как я могу сделать это?
Как предложенный Цицламино, я добавил следующую строку к своему/etc/rsyslog.conf файлу:
kern.* ^/opt/asusg50oled/utils/notify.sh
Это почти работало, но форматирование привело к OLED, просто показывающему дату, имя хоста и слово 'ядро' перед исчерпыванием комнаты. После небольшого рытья я выяснил следующее:
$template OLEDformat,"%msg%0
kern.* ^/opt/asusg50oled/utils/notify.sh;OLEDformat
Это почти там, но снова, я выбегаю из комнаты из-за своего рода метки времени.. дисплей в качестве примера:
[ 4477.993774] sd 11:0:0:0: [sdb] At
Я хочу избавиться от чисел на кронштейнах, таким образом, со мной оставляют
sd 11:0:0:0: [sdb] Attached SCSI rem
Все еще не прекрасный, но лучшее я доберусь с размером экрана. Было бы еще лучше, если это разделит его в 36 символах, таким образом, у меня сможет быть что-то как следующее:
sd 11:0:0:0: [sdb] Attached SCSI rem
ovable disk
Я принимаю ответ Ciclamino, поскольку это получило меня туда, где я должен был быть. Вот то, что я закончил тем, что делал:
Я создал и добавил, выполняют бит к сценарию оболочки /opt/asusg50oled/utils/notify-kern.sh
содержа
#!/bin/bash
cd `dirname $0`
stringA=$1
stringB=${stringA#\[*\]}
stringC=${stringB:0:36}
stringD=${stringB:36}
./notify.sh "$stringC" "$stringD"
Затем я добавил к/etc/rsyslog.conf
## output kernel messages to OLED
$template OLEDformat,"%msg%"
kern.* ^/opt/asusg50oled/utils/notify-kern.sh;OLEDformat
Наконец, я перезапустил rsyslog с sudo service rsyslog restart
.
Можно использовать системный журнал, чтобы поймать сообщения ядра и передать их по каналу к команде. Синтаксис будет немного отличаться для всевозможных реализаций syslogd. Вот пример того, как сделать это с rsyslog (в/etc/rsyslog.conf):
kern.* ^/opt/asusg50oled/utils/notify.sh