5

Я хочу изменить песню в spotify с помощью глобального ключа в Ubuntu. Это возможно на окнах с помощью специальной клавиши на клавиатуре "следующая песня"(?)

Как мне переназначить ключ в Ubuntu (здесь нет кнопки "следующая песня"), чтобы он работал как кнопка "следующая песня"? как "Ctrl + правая клавиша".

И как я могу сделать, чтобы эта работа с spotify, который работает через вино?

В основном я хочу знать, что такое код ascii для кнопки "следующая песня", и как мне сопоставить ее с комбинацией клавиш в Ubuntu. И, надеюсь, он без проблем направит эту команду через вино.

Редактировать: у меня нет кнопки "следующая песня" на машине с Ubuntu.

4 ответа4

3

Или jbonney нашел довольно аккуратное решение, используя dbus-send здесь, в его сущности

Или если вы спешите

"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
3

Для Ubuntu теперь есть « Spotify для Linux ». Для сопоставления сочетания клавиш с "следующей песней" может помочь dconf-editor (см. Здесь). После того, как сопоставление клавиш для "следующей песни" выполнено, появляется замечательная оболочка Spotify для интеграции медиа-ключей, написанная Джоном Ризом.

РЕДАКТИРОВАТЬ: Spotify для Linux теперь поддерживает медиа-ключи.

1

Для этого я использую следующий скрипт bash, который я написал с использованием различных команд, заимствованных из других источников. Вы просто просите функцию "playpause", но я подумал, что я мог бы также включить все это. Часть, которую вы хотите:

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

Короче говоря, он использует wmctrl для перемещения в рабочее пространство, в котором включен Spotify, использует xvkbd для отправки нажатия клавиши пробела в Spotify, а затем использует wmctrl для возврата назад.

Чтобы использовать его, сохраните его в файле, отметьте исполняемый файл (в диалоговом окне прав доступа к файлу), а затем используйте диспетчер параметров CompizConfig, чтобы добавить его в команды. (Поместите bash /path/to/script в первое поле на вкладке "Команды", затем добавьте привязку ключа во вторую вкладку. Это может быть любой ключ, который вы хотите использовать.) Вам понадобятся wmctrl и xvkbd ; найдите их в программном центре Ubuntu.

Весь сценарий, который предоставляет некоторые другие полезные функции, такие как переход к предыдущему или следующему треку и отображение названия песни, приведен ниже. Вы используете его так же, как приведенный выше фрагмент, за исключением того, что вы должны поместить bash /path/to/script --option в командную строку , где --option может быть любой из вещей, перечисленных в скрипте.

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

Используйте xev (средство просмотра событий X), чтобы определить, какой код клавиши отправляется при нажатии этой клавиши. Затем вы можете переназначить ключ в утилите сопоставления клавиш любой системы, которую вы используете (Gnome, KDE, bare X и т.д.).

В моей системе Debian xev устанавливается вместе с пакетом x11-utils , поэтому он, вероятно, включен в типичную установку Ubuntu для настольных компьютеров.

Пример использования:

$ 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .