Remapear a tecla “next song” no ubuntu para trabalhar com spotify e wine

5

Eu quero mudar a música no spotify com uma chave global no Ubuntu. Isso é possível no Windows com uma tecla especial no teclado, a "próxima tecla de música" (?)

Como posso remapear uma chave no ubuntu (sem o botão "próxima música" aqui) para funcionar como o botão "próxima música"? como "ctrl + tecla direita".

E como eu faria para fazer este trabalho com spotify, que está sendo executado através do vinho?

Basicamente eu quero saber qual é o código ascii para o botão "next song" e como faço para mapeá-lo para uma combinação de teclas no ubuntu. E espero que ele direcione este comando através do vinho sem problema.

Edit: Eu não tenho o botão "next song" na máquina do Ubuntu.

    
por Daniel T. Magnusson 18.11.2009 / 13:08

4 respostas

3

Para o Ubuntu, existe agora um " Spotify for Linux ". Para mapear uma combinação de teclas para "próxima música", o editor-dconf pode ajudar ( veja aqui ). Uma vez que um mapeamento de teclado para a "próxima música" é realizado, há um bom wrapper do Spotify para a integração de chaves de mídia escrita por John Reese.

EDIT: Spotify para linux agora suporta chaves de mídia.

    
por 19.09.2013 / 17:07
3

Ou o jbonney encontrou uma solução bem legal usando o dbus-send aqui em sua essência

Ou se você estiver com pressa:

"dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause" XF86AudioPlay
"dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Stop" XF86AudioStop
"dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next" XF86AudioNext
"dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous" XF86AudioPrevious
    
por 27.03.2017 / 14:38
1

Use xev (visualizador de eventos X) para determinar qual código é enviado quando você pressiona chave. Então você pode remapear a chave no utilitário keymapping de qualquer sistema que você esteja usando (Gnome, KDE, X nu, etc).

No meu sistema Debian, o xev está instalado com o pacote x11-utils , então é provável que ele esteja incluído em uma instalação típica da área de trabalho do Ubuntu.

Exemplo de uso:

$ xev
[example keypress: right option key on an apple USB keyboard]

KeyPress event, serial 33, synthetic NO, window 0x1200001,
    root 0x2e, subw 0x0, time 122600873, (-49,299), root:(679,325),
    state 0x0, keycode 255 (keysym 0xffec, Super_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x1200001,
    root 0x2e, subw 0x0, time 122600971, (-49,299), root:(679,325),
    state 0x0, keycode 255 (keysym 0xffec, Super_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False
    
por 18.11.2009 / 13:45
1

A maneira que eu faço isso é usar o seguinte script bash, que eu escrevi usando vários comandos emprestados de outras fontes. Você está apenas pedindo a função "playpause", mas imaginei que poderia incluir a coisa toda. A parte que você quer é:

#!/bin/bash

# Spotify Launch Script by Ben Kraft

# Borrows some commands from Spotify Control by Tommy Matilla:
# http://sites.google.com/site/tommymattila/home/spotifycontrol
# which itself is based on Stuart Colville's
# http://muffinresearch.co.uk/archives/2009/10/22/ubuntu-lock-screen-and-pause-spotify/

# Requires wmctrl and xvkbd

WP="$HOME/.wine"
SPATH="$HOME/.wine/drive_c/Program Files/Spotify/spotify.exe"
TITLE=$(wmctrl -xl | grep -o -e "spotify\.exe\.Wine.*$" | grep -o -e "Spotify.*$")
ACTIVEWIN=$(wmctrl -va ":ACTIVE:" 2>&1 | grep -o -e "0x.*$")

sendkeys () {
    wmctrl -xa "spotify.exe.Wine" || return 1
    xvkbd -q -delay 100 -text "$1"
    wmctrl -ia $ACTIVEWIN
}

if [ -z $TITLE ] ; then
  echo "Spotify is not running!
  exit 1
else
  sendkeys '\ '
fi
exit 0

Em suma, ele usa wmctrl para ir para a área de trabalho Spotify, usa xvkbd para enviar um pressionamento de tecla de espaço para o Spotify e, em seguida, usa wmctrl para voltar.

Para usá-lo, salve-o em um arquivo, marque o arquivo executável (na caixa de diálogo de permissões de arquivo) e use o Gerenciador de Configurações CompizConfig para adicioná-lo aos comandos. (Coloque bash /path/to/script na primeira caixa na aba "Comandos", então adicione uma ligação de chave na segunda aba. Essa pode ser qualquer chave que você queira usar.) Você precisará de wmctrl e xvkbd instalado; procurá-los no Ubuntu Software Center.

O roteiro completo, que fornece alguns outros recursos interessantes, como ir para a faixa anterior ou seguinte e exibir o título da música, está abaixo. Você o usa exatamente como o snippet acima, exceto que você precisa colocar bash /path/to/script --option na caixa de comando, onde --option pode ser qualquer um dos itens listados no script.

#!/bin/bash

# Spotify Launch Script by Ben Kraft

# Borrows some commands from Spotify Control by Tommy Matilla:
# http://sites.google.com/site/tommymattila/home/spotifycontrol
# which itself is based on Stuart Colville's
# http://muffinresearch.co.uk/archives/2009/10/22/ubuntu-lock-screen-and-pause-spotify/

# Requires wmctrl and xvkbd
# Usage:
USAGE="
usage: spotify [OPTIONS]

OPTIONS:
--play: Starts Spotify playing if it isn't already
--pause: Pauses Spotify if it isn't already
--playpause: Toggles Spotify between playing and pausing
--prev: Plays the previous song
--next: Plays the next song
--display: Prints the currently playing song and artist to stdout
--notify-send: Use only *after* --display; also pops up a notification with currently playing song and artist
--uri URI: tells Spotify to display URI (e.g. a playlist or user).

With no options, this script will kill a currently running instance of spotify if there is one.  With --uri, it starts Spotify iff it isn't running.  With any other option, it will return 1 if Spotify is not running.
"

WP="$HOME/.wine"
SPATH="$HOME/.wine/drive_c/Program Files/Spotify/spotify.exe"
TITLE=$(wmctrl -xl | grep -o -e "spotify\.exe\.Wine.*$" | grep -o -e "Spotify.*$")
ACTIVEWIN=$(wmctrl -va ":ACTIVE:" 2>&1 | grep -o -e "0x.*$")

sendkeys () {
    wmctrl -xa "spotify.exe.Wine" || return 1
    xvkbd -q -delay 100 -text "$1"
    wmctrl -ia $ACTIVEWIN
}

if [ $# -eq 0 ] ; then
    if pgrep spotify.exe &>/dev/null ; then
        killall spotify.exe
    fi
    exec env WINEPREFIX="$WP" wine "$SPATH"
elif [ "$1" == "--uri" ] ; then
    shift
    exec env WINEPREFIX="$WP" wine "$SPATH" /uri "$@"
elif [ -z "$TITLE" ] ; then
    echo "Spotify is not running" >&2
    if [ "$@" = "--display --notify-send" ] ; then
        notify-send "Spotify is not running"
    fi
    exit 1
else
    case "$1" in
          --playpause) #toggles
        sendkeys '\ '
        ;;

          --next)
        sendkeys '\C\[Right]'
        ;;

          --prev)
        sendkeys '\C\[Left]'
        ;;

            --pause) #pauses if playing; does nothing if not
        if [ -n "${TITLE:9}" ] ; then
            sendkeys '\ '
        fi
        ;;

            --play) #plays if paused; does nothing if not
        if [ -z "${TITLE:9}" ] ; then
            sendkeys '\ '
        fi
        ;;

          --display)
        if [ -n "${TITLE:9}" ] ; then
            OUT1="Now Playing"
            OUT2="${TITLE:9}"
        else
            OUT1="Spotify paused."
            OUT2=""
        fi
        echo "$OUT"
        if [ "$#" -ge 2 ] && [ $2 == "--notify-send" ] ; then
            notify-send "$OUT1" "$OUT2"
        fi
        ;;
            *)
        echo "$USAGE"
        exit 2
        ;;
    esac
fi

exit 0
    
por 21.08.2011 / 04:47