Проблема с `notify-send`

Вот секрет:

Нет отчета об apport, потому что сообщение об ошибке указывает на полную ошибку на диске.

Итак, решение состоит в том, чтобы сначала освободить дисковое пространство!

Вы можете сделать это разными способами:

сначала я попытаюсь очистить кеш apt с помощью: sudo apt-get clean, после чего очистить кеш браузера, если /home/ каталог не находится на отдельном разделе, также удалите кеш эскиза с помощью rm -rf ~/.thumbnails, в конце концов, чтобы проверить и удалить старые файлы журналов в каталоге /var/log/.

Это безболезненные трюки для освобождения диска.

* Update

Если ни один из них не помог вам, вы, вероятно, закончили inodes, так что вы должны воссоздать свою FS с большим количеством inodes, или попытайтесь сохранить раздел чистым.

1
задан 21 September 2013 в 21:43

4 ответа

Я изучал последовательный способ уведомить всех пользователей X (как root), и мои исследования (глядя на кучу мест в сети) показали, что, хотя можно было использовать уведомление-отправить таким образом, для этого потребовались сценарии найти информацию о сеансе DBUS и / или использовать DISPLAY и / или имена и местоположения файлов Xauthority, и даже тогда люди по-прежнему не могли заставить их работать. Таким образом, попытка согнуть уведомление - отправить волю, чтобы включить трансляцию для пользователей X, окажется ненадежной (особенно если вы обновите или измените дистрибутив в какой-то момент в будущем).

Однако ... в моей системе команда wall работала как шарм и невероятно проста в использовании. Единственным недостатком является то, что он также передает сообщение всем текстовым терминалам / консолям. Если вы не возражаете, тогда wall может быть лучшим и надежным вариантом. Примечание: пользователь, вызывающий wall, должен быть root.

0
ответ дан 24 May 2018 в 17:44

Ответ Radu, похоже, не работает для меня 16.04. Вместо того, чтобы пытаться бороться с проблемой DISPLAY, которая, кажется, меняется с разными версиями, я об этом немного по-другому. Я создаю один скрипт, который вызывается двумя способами. Правило udev вызывает сценарий, отправляя какой-то вывод в именованный канал. При входе в систему сценарий также запускается в сервисном режиме. Здесь он прослушивает трубку и запускает желаемую команду GUI.

В качестве примера я хотел бы получать уведомления о USB-устройствах хранения, когда они подключены, и, в частности, мне нравится знать, какой путь устройство и его серийный номер (что может показаться странным, но у меня есть веские причины). Вот сценарий, который я использую для выполнения этого.

#!/bin/bash
# script name: usb-notify.sh
# This script needs to be called at logon with "service" parameter
# This script needs to be called by udev on USB insertion with no parameter

pipe="/tmp/usb-notifications"
if [ "$1" == "service" ]; then
    # create the named pipe that will help us trigger events from udev
    rm "$pipe"
    mkfifo "$pipe"

    # This outer while loop ensures that we can process multiple triggers
    while true
    do
        # This inner while loop reads individual trigger events
        while read info
        do
            # run some GUI command. Here, I'm running notify-send
            notify-send "USB Inserted" "$(echo -e $info)"
        done < "$pipe"
    done
else
    # Here's where udev triggers our event. If you don't need to pass any arguments
    # you  could just as easily pass an empty line as a trigger for the service.
    [ -e "$pipe" ] && echo "Device: $DEVNAME\\\nSN: $ID_SERIAL_SHORT" > "$pipe"
fi

Этот сценарий затем должен быть вызван двумя способами. Во-первых, для вызова этого скрипта необходимо создать правило udev. Это можно сделать с помощью следующей команды (очевидно, вы должны изменить это, чтобы посмотреть, какое устройство должно запускать ваш скрипт):

echo 'ACTION=="add",KERNEL=="sd?",RUN+="[path-to-script]/usb-notify.sh"' | sudo tee -a /etc/udev/rules.d/80-USB.rules

Во-вторых, вам нужно вызвать этот скрипт с параметром «service» на авторизоваться. Итак, откройте программу «Запуск приложений» и добавьте запись, которая запускает «[путь к вашему скрипту] /usb-notify.sh service»

Этот скрипт может быть изменен, чтобы запускать практически любой Приложение GUI для событий udev. Если вы не хотите, чтобы другие пользователи могли смотреть ваш канал, вы должны, вероятно, установить ограничительные права на него.

0
ответ дан 24 May 2018 в 17:44

Вам нужно позвонить ему с помощью sudo? Это может решить проблему.

В качестве альтернативы, я обнаружил, что мне нужны DISPLAY=:0 и XAUTHORITY=/home/<user_name>/.Xauthority для работы при запуске от имени root (от службы systemd в этом случае - с Environment=...), .

0
ответ дан 24 May 2018 в 17:44

Вы можете использовать pynotify вместо командной строки. Это довольно просто и устанавливается по умолчанию в Ubuntu. Быстрый образец:

import pynotify

pynotify.init("Name")
n = pynotify.Notification("Name", "This is a notification")
n.show()
-1
ответ дан 24 May 2018 в 17:44

Другие вопросы по тегам:

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