Existe algum sinal visual no Linux que funcione no X?

5

Eu sei que existe um sino visual no Vim que faz toda a tela piscar em vez de apitar. Vários programas de terminal também possuem o mesmo recurso.

Estou procurando por um tipo similar de campainha visual que piscará todas as minhas telas, em todos os meus desktops virtuais, em X. Eu só tenho fones de ouvido no trabalho e meu alto-falante do PC é muito silencioso, então eu precisa de algum outro método de notificação que definitivamente vai chamar minha atenção.

Alguém sabe se existe?

    
por Neil 04.06.2009 / 17:08

10 respostas

4

Eu não faço nada exatamente assim, mas você pode usar a ferramenta de linha de comando notificar-enviar para ter pop-ups na área de trabalho. No Ubuntu o pacote é libnotify-bin. Por exemplo:

notify-send -u normal -t 10000 -i info 'hw' 'Hello world'
    
por 04.06.2009 / 17:28
5

Eu tive o mesmo problema, então escrevi um programa para isso:

link

Para executar:

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

Espero que ajude.

    
por 16.02.2015 / 21:41
2

Você não especificou o GNOME ou o KDE, mas o KDE 4.2 tem suporte embutido para isso. Se você olhar em Configurações do sistema > Acessibilidade, você pode ligar o sino visual lá. O KDE também permite personalizar ações para várias notificações do sistema que vão além dos sons. Por exemplo, você pode mostrar um pop-up, executar um comando, marcar uma entrada na barra de tarefas, etc. Isso fica em Configurações do sistema > Notificações do sistema.

    
por 04.06.2009 / 18:30
2

Sim, isso é possível!

O que se segue é uma implementação que escurece a luz de fundo do LCD do seu monitor e depois a leva de volta para onde estava.

Etapa um: encontre uma maneira de alterar de forma confiável sua luz de fundo [1] [2] . Vou usar o mais simples aqui, mas ymmv.

Existem controles no nível do kernel (?) em / sys / class / backlight. O nome do subdiretório exato varia de acordo com sua configuração. Estou usando esse método neste exemplo, mas se você encontrar outro comando que funcione, ignore a etapa dois e altere o script na etapa três para que as funções get_brightness e set_brightness usem o método escolhido.

Isso fornecerá seu nível de brilho atual

cat /sys/class/backlight/intel_backlight/brightness

Agora tente alterá-lo:

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

Isso deve deixar sua tela mais escura por um segundo e, em seguida, levá-la ao nível 80 (use o valor que você obteve anteriormente ou o seu monitor pode estar muito escuro). Eu os agrupei no mesmo comando para que você não fique preso a uma tela muito escura. Neste teste, estamos agindo como raiz. Nós teremos acesso para sua própria conta em seguida. (Pare aqui se não funcionar!)

Etapa dois: tenha acesso à sua conta:

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

(Note, isso pode não sobreviver à reinicialização. Eu voltarei e revisarei isso se for esse o caso, mas eu só reinicio ~ trimestralmente, então fique comigo.)

Etapa três: escreva um script como o seguinte:

#!/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

Você deve ser bom para ir. Salve isso como /usr/local/bin/visual-bell e torne-o executável ( chmod +x visual-bell ), então você pode executá-lo. Esse script piscará o número de vezes especificado (o padrão é um), então você pode executar visual-bell 3 para piscar três vezes.

Você pode, teoricamente, piscar vários monitores se usar /sys/class/backlight/*/brightness , mas tenha em mente que diferentes monitores podem ter diferentes escalas de brilho. Meu Dell LCD (conectado por meio de um adaptador DisplayPort-VGA) não funciona aqui, embora a tela do meu laptop funcione.

Etapas adicionais: Instale como o "comando de som" em programas como o pidgin. Eu não sei como fazer isso em emuladores de terminal.

    
por 28.03.2014 / 00:06
1

Você pode usar algo como Zenity para exibir uma caixa de diálogo de alerta ou talvez até mesmo um item da área de notificação. Você também pode usar dzen ou xmsgd se você quiser algo baseado em texto. Note que nenhum destes 'pisca a tela' embora.

    
por 04.06.2009 / 17:35
1

Dependendo do que você precisa, há também xmessage - é antigo, é feio, mas está incluído no X. Ele não pisca na tela, mas ele exibe uma mensagem e você pode especificar quais botões estão nele (qual você pressiona é retornado no status de saída) se isso é importante.

    
por 04.06.2009 / 19:04
1

Dependendo da natureza do evento e do ambiente de área de trabalho que você está usando, o Specto pode funcionar para você.

    
por 04.06.2009 / 19:39
1

Mantenha a simplicidade - tente isto:
xrefresh -solid green
Sinta-se à vontade para repetir o comando várias vezes (talvez até usando cores diferentes) para tornar seu visual mais impressionante ...; -)

    
por 01.01.2017 / 01:29
0

Estou surpreso que ninguém tenha mencionado personagens ansiosos. Que tal isso (talvez uma das soluções mais limpas para um sino visual):

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

e pronto. :)

se você quiser fazer um pequeno método, basta colocar o seguinte em seu bashrc / zshrc / whateverrc:

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

Agora, o seu terminal irá piscar quando você colocá-lo no final ou comandos longos ... como sudo pacman -Syu; vflash ; %código%; etc.

Se você quiser que continue piscando você (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;
}

NOTA1: Isso não funciona no tmux ou na tela. : '(

NOTA2: Esta informação foi recuperada de Wikipedia: Ansi Escape Codes e modificada. Leia! É uma coisa boa; Eu prometo. :)

NOTE3: Os códigos de escape ansi usados são sudo apt-get update && sudo apt-get dist-upgrade; vflash . Na maioria dos SOs baseados em linux, você pode usar \x1b , mas eu sempre acabo usando \e porque ele também funciona no OS X (embora eu não use o OS X e nunca o faça).

    
por 24.02.2016 / 17:14
0

Uma ferramenta chamada xcalib pode inverter o vídeo. Invertendo duas vezes atinge o efeito de sino visual. Aqui está o pequeno trecho de código para fazer isso.

for i in 1 2; do
  sleep 0.1
  xcalib -alter -invert
done
    
por 19.02.2017 / 06:47

Tags