Xbindkeys 仅在第一次启动时正确启动应用程序

Xbindkeys 仅在第一次启动时正确启动应用程序

当我在 GNOME 中输入以下行时,~/.xbindkeysrc应用程序正确启动vlc

"vlc"
   XF86Calculator

问题是我想运行一个 shell 脚本。当我在~/.xbindkeysrcGNOME 中输入以下内容时,它不会启动我的脚本,而是启动计算器。

"/home/menteith/bin/audio.sh"
   XF86Calculator

这是为什么?该脚本是可执行的,从命令行运行时可按预期工作。

更新 感谢@PRATAP,我知道当我使用编译程序~/.xbindkeysrc(即不是 bash 脚本)并XF86Calculator第一次按下按钮时它会启动我的程序,但是当我 XF86Calculator第二次按下按钮时我会启动计算器。

更新2

感谢@Raffa,我尝试了另一种解决方案。我写了一个简单的 C 程序:

#include <stdio.h>
#include <stdlib.h>

int main() {
  puts("Starting now:");
  system("killall -s1 xbindkeys; /home/menteith/bin/audio");
  return 0;
}

它先终止程序xbindkeys,然后运行包装器,包装器又运行脚本。但是,它仍然无法工作。第二次和下一次calculator启动后。

更新 3 我的脚本在来自显示器(HDMI)的音频和来自 PC 的音频之间切换。

#!/usr/bin/env bash

output=$(pactl list cards |grep 'Active Profile:' | cut -d ':' -f 3)

if [ $output == "analog-stereo" ]; then
    out="hdmi-stereo"
else
    out="analog-stereo"
fi

echo test
# Set the choosen card profile as sink
pactl set-card-profile "alsa_card.pci-0000_00_1f.3" "output:${out}"


# Set the default sink to the new one
pacmd set-default-sink "alsa_card.pci-0000_00_1f.3.${out}" &> /dev/null

# Redirect the existing inputs to the new sink
for i in $(pacmd list-sink-inputs | grep index | awk '{print $2}'); do
    pacmd move-sink-input "$i" "alsa_card.pci-0000_00_1f.3.${out}" &> /dev/null
done

答案1

步骤1:

首先:我建议~/.xbindkeysrc先清除文件来修改文件,然后将以下代码复制并粘贴到文件中,并Key_Name用您的实际键名替换,使其看起来像这样:

"sh /home/menteith/bin/audio.sh && killall -s1 xbindkeys"
Key_Name

第二:xbindkeys通过在终端中运行以下命令重新启动:

killall -s1 xbindkeys

最后:尝试配置的密钥并查看它是否按预期工作。


第二步:

请检查系统设置键盘快捷键如下图所示:

在此处输入图片描述

如果配置了热键启动计算器此处,则应将其禁用。否则,它可能会干扰xbindkeys并捕获热键按下,从而阻止脚本运行并运行计算器。


步骤#第三:

另一个需要查看的地方是/usr/share/X11/xkb/symbols/pc文件。

首先:gedit通过在终端中运行以下命令在编辑器中打开文件:

sudo nano /usr/share/X11/xkb/symbols/pc

第二:查找包含XF86Calculator以下内容的行。它看起来类似以下内容:

key  <Key_Name> {   [XF86Calculator]    };

通过在它前面添加一个来注释掉这一行//,就像这样:

//key  <Key_Name> { [XF86Calculator]    };

注意键名称<Key_Name>保存并关闭文件。

第三:编辑你的~/.xbindkeysrc文件替换XF86Calculator键名称步入第二上面。它应该看起来像这样:

"sh /home/menteith/bin/audio.sh && killall -s1 xbindkeys"
Key_Name

保存并关闭文件。

第四:通过在终端中运行以下命令清除 xkb 设置缓存:

sudo rm -rf /var/lib/xkb/*

第五:重新启动系统以激活新的 xkb 配置,或者通过在终端中使用以下命令设置 xkb 地图布局来重新加载新的 xkb 配置:

setxkbmap -layout us

最后:首先xbindkeys在终端中运行以下命令:

xbindkeys -f ~/.xbindkeysrc

然后尝试使用热键。如果没有任何反应,请xbindkeys在终端中运行以下命令重新启动:

killall -s1 xbindkeys

现在,再次尝试您的热键,看看它是否按预期工作。

祝你好运

答案2

解决方法

在 Ubuntu 19.10 上尝试过

myscript.sh文件的内容。

#!/bin/bash

notify-send "Script Ran Successfully"

.xbindkeysrc文件的内容。

"/bin/bash $HOME/myscript.sh"
XF86Calculator

登录后,

运行xbindkeys --poll-rc。键 XF86Calculator 应该运行你的脚本。

--poll-rc 选项参考https://wiki.archlinux.org/index.php/Xbindkeys并查看此链接中答案下方的评论https://askubuntu.com/a/1126410/739431

在此处输入图片描述

相关内容