当我在 GNOME 中输入以下行时,~/.xbindkeysrc
应用程序正确启动vlc
。
"vlc"
XF86Calculator
问题是我想运行一个 shell 脚本。当我在~/.xbindkeysrc
GNOME 中输入以下内容时,它不会启动我的脚本,而是启动计算器。
"/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