Существует несколько подходов к обновлению пакета до более новой версии, которая еще не упакована, без риска того, что обновленная версия будет перезаписана новым пакетом:
Первый гораздо больше «похож на Debian -».
Однако в вашем конкретном случае лучшим решением может быть полное прекращение использования xf86-input-wacom
:libinput
поддерживает сенсорные экраны Wacom и имеет улучшенную поддержку мультитач. Он будет автоматически обрабатывать сенсорный экран после удаления драйвера Wacom.
Если libinput
не работает, лучший способ получить обновленный драйвер Wacom, не прибегая к FrankenDebian, — пересобрать драйвер:
установить некоторые инструменты, которые нам понадобятся
sudo apt install build-essential devscripts
получить исходный пакет Ubuntu
dget -ux https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/xf86-input-wacom/1:0.36.1-0ubuntu2/xf86-input-wacom_0.36.1-0ubuntu2.dsc
перейти в извлеченный каталог
cd xf86-input-wacom*
создайте пакет для представления зависимостей сборки (это упростит очистку)
mk-build-deps debian/control
установить
sudo apt install./*build-deps*.deb
убрать с дороги
mv./*build-deps*.deb..
собрать пакет
dpkg-buildpackage -us -uc
установить сгенерированные пакеты
sudo debi
очистить
sudo apt --autoremove purge xf86-input-wacom-build-deps xserver-xorg-input-wacom-dbgsym
Я хотел бы поделиться скелетом кода. Вы можете расширить эту идею.
#!/bin/bash
# monitor_changes
#
# notifies changes to FILE passed as first parameter $1
# uses tail -1 to return last line of the file
# first run -- save last line on variable old
old=$(tail -1 $1)
# infinite loop
while : ; do
sleep 1
# read again last line
new=$(tail -1 $1)
# this is where the magic should happen
[[ "$old" != "$new" ]] && echo "NOTIFY: $old --> $new"
# save for next round
old=$new
done
inotify
, чтобы поймать (потенциальные )изменения. То, что файл изменен, не означает, что он изменен.
make
для изменения файла. Он работает с датой файла, поэтому он должен быть надежным. Вам также нужен выходной файл, это может быть фиктивный файл, который вы создаете после записи на экран.
Другие инструменты для выполнения второй части :, например. Использование хэшей файлов (вместо дат ), если файл небольшой, сохранение копии и использование cmp
.
#!/bin/bash
while true
do
inotify-wait --event modify source-file.txt
make $(basename source-file.txt).stamp
#there is a race hazard here: if the file changes again before we get back to the wait, then it may not be picked up.
done
# A make file template
%.stamp: %.txt
«tab» do_it $<
«tab» touch $@
Замените «вкладка» на вкладку. Замените do_it
кодом, который это делает. $<
будет заменено именем исходного файла -.
В общем случае вы хотите отслеживать файл и отправлять уведомление на рабочий стол с новым содержимым файла только тогда, когда содержимое изменилось, вы можете использоватьinotifywait
(изinotify-tools
)с -m
, --monitor
вариант исполнения на неопределенный срок.
--format "%e"
будет печатать только тип события для следующей команды.
notify-send
, из libnotify для уведомлений на рабочем столе, используется для отправки уведомления только в случае изменения содержимого файла.
#!/bin/bash
f="filename"
curr=$(<"$f")
inotifywait -m -e modify "$f" --format "%e" | while read -r event; do
if [ "$event" == "MODIFY" ]; then
prev="$curr"
curr=$(<"$f")
[ "$curr" == "$prev" ] || notify-send "Title" "$curr"
fi
done
В вашем конкретном случае я бы не стал отслеживать изменения в файлах, если вашей целью является отображение уведомления на рабочем столе с текстом типа «вы подключены» или «вы отключены». Я бы изменил место, где вы печатаете этот текст (каждые N секунд, как вы говорите )в этот файл, на что-то вроде этого:
while true; do
prev="$curr"
curr=$( <here you output the new text> )
[ "$curr" == "$prev" ] || notify-send "Title" "$curr"
sleep 4
done