Назад | Перейти на главную страницу

Есть ли в Linux визуальный звонок, работающий в X?

Я знаю, что в Vim есть такая вещь, как визуальный звонок, который заставляет весь экран мигать вместо звукового сигнала. Некоторые терминальные программы также имеют ту же функцию.

Я ищу визуальный звонок аналогичного типа, который будет мигать на всех моих экранах на всех моих виртуальных рабочих столах в X. У меня есть только наушники на работе, а динамик моего компьютера слишком тихий, поэтому мне нужен другой метод уведомления, который обязательно привлечет мое внимание.

Кто-нибудь знает, существует ли он?

У меня была такая же проблема, поэтому я написал для этого программу:

https://github.com/rianhunter/xvisbell

Бежать:

$ git clone https://github.com/rianhunter/xvisbell.git
$ cd xvisbell
$ make
$ xset b on
$ xset b 100
$ ./xvisbell &
$ xkbbell # test

Надеюсь, это поможет.

У меня нет ничего подобного, но вы можете использовать инструмент командной строки notify-send для отображения всплывающих окон на рабочем столе. В Ubuntu это пакет libnotify-bin. Например:

notify-send -u normal -t 10000 -i info 'hw' 'Hello world'

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

Вы не указали GNOME или KDE, но KDE 4.2 имеет для этого встроенную поддержку. Если вы посмотрите в Системные настройки> Специальные возможности, вы можете включить визуальный звонок там. KDE также позволяет настраивать действия для различных системных уведомлений, выходящих за рамки звуков. Например, вы можете показать всплывающее окно, запустить команду, отметить запись на панели задач и т. Д. Это находится в разделе «Системные настройки»> «Системные уведомления».

Да, это возможно!

Ниже приведена реализация, которая затемняет подсветку ЖК-дисплея монитора, а затем возвращает его на прежнее место.

Шаг первый: найти способ надежно изменить подсветку [1][2]. Я буду использовать самый простой вариант, но ymmv.

В / sys / class / backlight есть элементы управления уровнем ядра (?). Точное имя подкаталога будет зависеть от ваших настроек. Я использую этот метод в этом примере, но если вы найдете другую команду, которая работает, вы можете пропустить шаг два и изменить сценарий на шаге 3, чтобы get_brightness и set_brightness функции используют выбранный вами метод.

Это даст вам ток уровень яркости

cat /sys/class/backlight/intel_backlight/brightness

Теперь попробуйте его изменить:

export BRIGHTNESS=/sys/class/backlight/intel_backlight/brightness
echo 50 |sudo tee $BRIGHTNESS; sleep 1; echo 80 |sudo tee $BRIGHTNESS

Это должно сделать ваш экран темнее на одну секунду, а затем довести его до уровня 80 (используйте значение, которое вы получили ранее, иначе ваш дисплей может быть слишком темным). Я объединил их в одну команду, чтобы вы не застряли на слишком темном экране. В этом тесте мы действуем как root. Далее мы получим доступ к вашей учетной записи. (Остановитесь здесь, если это не сработает!)

Шаг второй: получить доступ к своей учетной записи:

sudo chmod g+w /sys/class/backlight/intel_backlight/brightness
sudo chgrp video /sys/class/backlight/intel_backlight/brightness
sudo usermod -a -G video my_username

(Обратите внимание, это может не пережить перезагрузку. Я вернусь и исправлю это, если это так, но я перезагружаюсь только ~ раз в квартал, так что терпите меня.)

Шаг третий: напишите сценарий, подобный следующему:

#!/bin/sh
help() { cat <</help
Blink/flash the whole X display (on one LCD monitor)
Usage: visual-bell [BLINK_COUNT]
0.2+20140327 Copyright (c) 2010+ by Adam Katz <www.khopis.com/scripts>, LGPL 2+
/help
}

SLEEP_TIME=0.03
BRIGHTNESS=/sys/class/backlight/intel_backlight/brightness

get_brightness() {
  cat $BRIGHTNESS
}

set_brightness() {
  echo $1 > $BRIGHTNESS
}

COUNT=${1:-1}  # read count from first argument (default to one blink)
# if the argument wasn't a number greater than zero, show help and exit
if ! [ "$COUNT" -gt 0 ] 2>/dev/null; then
  help
  exit 1
fi

LEVEL=`get_brightness`

while [ $COUNT -gt 0 ]; do

  set_brightness 0        # blacken the screen
  sleep $SLEEP_TIME
  set_brightness $LEVEL   # revert the screen to previous brightness
  sleep $SLEEP_TIME

  COUNT=$((COUNT-1))      # decrement counter

done

Тебе должно быть хорошо. Сохраните это как /usr/local/bin/visual-bell и сделать его исполняемым (chmod +x visual-bell), то вы можете запустить его. Этот скрипт будет мигать указанное количество раз (по умолчанию один), поэтому вы можете запустить visual-bell 3 моргнуть три раза.

Теоретически вы можете мигать на нескольких мониторах, если используете /sys/class/backlight/*/brightness но учтите, что разные мониторы могут иметь разные шкалы яркости. Мой ЖК-дисплей Dell (подключенный через адаптер DisplayPort-VGA) здесь не работает, хотя дисплей моего ноутбука работает.

Дальнейшие шаги: Устанавливать как «звуковую команду» в таких программах, как pidgin. Я не знаю, как это сделать в эмуляторах терминала.

Будьте проще - попробуйте следующее:
xrefresh -solid green
Не стесняйтесь повторять команду несколько раз (возможно, даже используя разные цвета), чтобы визуальный колокол стал более впечатляющим ... ;-)

Вы можете использовать что-то вроде Зенити для отображения диалогового окна с предупреждением или, возможно, даже элемента области уведомлений. Вы также можете использовать дзен или xmsgd если вы хотите что-то на основе текста. Обратите внимание, что ни один из них не «мигает экраном».

В зависимости от характера события и того, какую среду рабочего стола вы используете, Specto может сработать для вас.

Я удивлен, что никто даже не упомянул escape-символы ANSI. Как насчет этого (возможно, одно из более чистых решений для визуального звонка):

printf "\x1b[?5h"; sleep .1; printf "\x1b[?5l"

и готово. :)


если вы хотите сделать из этого небольшой метод, просто поместите в свой bashrc / zshrc / somethingrc следующее:

vflash(){
    printf "\x1b[?5h";
    sleep .1;
    printf "\x1b[?5l"
}

Теперь ваш терминал будет мигать, когда вы поместите его в конец или длинные команды ... например sudo pacman -Syu; vflash; sudo apt-get update && sudo apt-get dist-upgrade; vflash; и т.п.

Если вы хотите, чтобы он продолжал мигать вам (muweheheh):

flasher () {
    while :; do
        printf "\x1b[?5h";
        sleep 0.1;
        printf "\x1b[?5l";
        ## for bash
        read -s -n1 -t1 && break;
        ## for zsh
        # read -s -k1 -t1 && break;
    done;
}


ПРИМЕЧАНИЕ 1: Это не работает в tmux или screen. : '(

ЗАМЕТКА 2: Эта информация была получена из Википедия: Коды выхода Ansi и модифицированный. Прочитать! Это хороший материал; Обещаю. :)

ЗАМЕТКА 3: Используемые escape-коды ansi: \x1b. В большинстве ОС на базе Linux вы можете использовать \e, но я всегда использую \x1b потому что он работает и на OS X (хотя я не использую OS X и никогда не буду).

Инструмент под названием xcalib может инвертировать видео. Двойное инвертирование позволяет добиться визуального эффекта звонка. Вот небольшой фрагмент кода для этого.

for i in 1 2; do
  sleep 0.1
  xcalib -alter -invert
done