如何创建键盘快捷键来播放/暂停后台运行的任何音频/视频?

如何创建键盘快捷键来播放/暂停后台运行的任何音频/视频?

因此,我为我的笔记本电脑购买了这个键盘,它没有媒体键,而且我非常习惯按笔记本电脑上的播放/暂停按钮来暂停后台播放的任何媒体。然而,使用这个键盘,由于没有媒体键,我必须创建自己的键盘快捷键来执行此操作。到目前为止,我已经成功地制作了用于音量控制的键盘快捷键。

研究和我的尝试:

  1. 我发现此页面显示了从终端模拟媒体键的命令。 https://askubuntu.com/questions/235126/simulate-media-keys-in-terminal/235181#235181。该命令是,xdotool key XF86AudioPlay但是当我通过以下方式创建键盘快捷键时设置 > 键盘 > 应用程序快捷方式。这似乎不起作用。

  2. 当我按下我设置的键盘快捷键时超级+F11我的 CPU 使用率上升了一点,这意味着快捷方式正在工作。我通过更改快捷方式执行的命令来确认这一点,exo-open --launch WebBrowser正如您可能认为的那样,当我按下时会打开我的网络浏览器超级+F11

  3. 现在,因为我了解一点 C/C++,所以我创建了这个包装程序,它执行完全相同的操作

#include <stdlib.h>

int main() {
    system("xdotool key XF86AudioPlay");
}

并映射了执行该程序的快捷方式,但是唉!它仍然不起作用。

当我按下笔记本电脑键盘上的默认播放/暂停按钮时,如何获取 XFCE 执行的命令,因为这似乎会播放/暂停在后台播放的任何媒体。

我在 Arch Linux 上使用 XFCE。我通常在 rhytmbox 音乐播放器上听音乐。

答案1

如果您只想控制rhythmbox播放rhythmbox-client --play歌曲或rhythmbox-client --pause暂停歌曲就足够了。

但我发现这个软件playerctl在一些 Arch wiki 中被称为控制当前播放的媒体。我不是 100% 确定它的优先级是什么,但是当我打开 YouTube 视频时,它默认控制它,而不是扰乱 Rhythmbox。要在播放和暂停之间切换,请运行playerctl play-pause。要转到您运行的下一个视频/音乐playerctl next以及您运行的上一个视频/音乐playerctl previous

我不能 100% 确定这是否适用于任何其他发行版,或者是否可用,但它对我来说适用于 Arch。

答案2

Rhythmbox 似乎支持这两种rhythmbox-client --play/--pause命令,以及使用 发送的 D-Bus 命令dbus-send,如中所述AskUbuntu 上的这个问题这个问题在 U&L.SE 上,链接自 AskUbuntu 答案

简而言之,dbus-send命令是:

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

前提是需要先启用 Rhythmbox 的 MPRIS API。

但是,如果您还需要使用这些相同的按键来控制任何 YouTube 视频,您可能需要这些按键来激活一个脚本,该脚本可以找出当前正在播放的播放器,并将正确的命令发送到 Rhythmbox 或任何网络浏览器(或其他应用程序)您用来播放 YouTube 视频。对于浏览器来说,需要为正确的浏览器选项卡发送命令/按键,该选项卡不一定是当前的浏览器选项卡......

答案3

我发现与您相同:该命令xdotool key XF86AudioPlay在 shell 中运行,但不能从快捷方式或应用程序启动器运行。所以我得出的结论是,xdotool只有从交互式 shell 执行时才有效。有趣的是,我使用以下命令让它在键盘快捷键和启动器图标(例如任务栏上)中工作:

bash -i -c 'xdotool key XF86AudioPlay'

一旦您移除-i开关,从而使其成为bash非交互式,它就会停止工作。不知道为什么会出现这种情况...

该方法的好处XF86AudioPlay是,它还适用于暂停在 Firefox 后台播放的 Youtube 视频。


更新

好的,我知道为什么会发生这种情况。我的内心.bashrc已经改变$LD_LIBRARY_PATH,这是xdotool跑步所必需的。然而,当登录到我的 GUI 会话 (XFCE) 时,这种情况并没有发生。因此,直接从 GUI(例如启动器或 Alt+F2)启动而不是从终端启动的任何程序都不会看到修改后的$LD_LIBRARY_PATH,从而丢失一些库。

所以正确的解决方案实际上是将 的修改放在$LD_LIBRARY_PATHin.profile而不是.bashrc。这样,XFCE 将在登录时执行它们,并且所有程序都可以看到它们。尽管如此,我还是将旧的答案留在这里以供未来的访客使用。

答案4

如果您使用 Audacious,您可以使用

audacious -t

在暂停和播放之间切换(请参阅man audacious)。

相关内容