AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题

问题[xbindkeys](ubuntu)

Martin Hope
S. N.
Asked: 2020-05-20 11:09:04 +0800 CST

xbindkeys + xvkbd 有效,但 xbindkeys + xdotool 失败

  • 0

这是我的 .xbindkeysrc 文件的相关部分。第一个注释行让您了解我想要实现的目标。

# System-wide equivalence of Shift-Del, Ctrl-Ins, Shift-Ins and Ctrl-X, Ctrl-C, Ctrl-V, respectively

# "xvkbd -xsendevent -text '\Cx'"
"xdotool key 'Control_L+x'"
Shift + Delete + Release

# "xvkbd -xsendevent -text '\Cc'"
"xdotool key 'Control_L+c'"
Control + Insert + Release

# "xvkbd -xsendevent -text '\Cv'"
"xdotool key 'Control_L+v'"
Shift + Insert + Release

一开始,我对基于 xvkbd 实用程序(注释行)的解决方案非常满意,直到我意识到它在 Gnome 应用程序中不起作用。

所以我不得不改用 xdotools。由于某些原因,只有第二个块(对应于复制操作)在工作。我需要你就其他两个街区的改变提出建议。

shortcut-keys xdotool xbindkeys
  • 2 个回答
  • 442 Views
Martin Hope
Jdclark
Asked: 2020-04-23 09:48:58 +0800 CST

按下后如何暂时禁用键盘上的某个键?

  • 2

我把啤酒洒在我的机械键盘上,因为每当我按下它时它往往会重复“ a ”键(是的,我已经清洁过几次,使用过酒精等)。我尝试使用“弹跳键”来缓解此问题,但此功能会在按下所有键后暂时禁用它们。换句话说,“弹跳键”会干扰我在需要键入带有重复字母的单词(< 就像单词“letter”中的“t”)或重复aaa快速按退格键时快速键入的能力。

(好的,我不会在其余文本中留下重复,但你可以看到它以 m a a denning 频率发生)

如果有帮助,我使用 xev 来准确确定操作系统正在接收的命令序列,看起来每次“a”重复时都是因为键盘多次发送所需的序列(KeyPress 后跟 KeyRelease,然后 KeyPress其次是 KeyRelease 再次)。换句话说,键没有停留在“KeyPress”状态。它在重复自己,好像我多次按下并释放它一样。

我见过其他人问同样的问题,但解决方案实际上并不是我正在寻找的。例如,在这个问题的第一个答案中提出的解决方案禁用自动重复,但这对我不起作用,因为“a”没有陷入“按下”状态。同一问题中的第二个答案也不起作用,因为在按下问题键后它会禁用整个键盘。我只想暂时禁用“a”键,并且只禁用“a”键一段很短的时间(~50ms)。

幸运的是,我在打字时很少需要重复字母“a”,所以即使是使用自动更正之类的解决方案也对我有用。最好,我想使用一个使用 xbindkeys 的解决方案,因为我已经在使用该包来重新映射我的鼠标按钮。

编辑:针对下面的评论,以下是“xinput list”和“xev”的输出:

$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SINOWEALTH Game Mouse                     id=9    [slave  pointer  (2)]
⎜   ↳ EST Gaming keyboard                       id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ SINOWEALTH Game Mouse Keyboard            id=10   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=11   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=13   [slave  keyboard (3)]
    ↳ Eee PC WMI hotkeys                        id=15   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=16   [slave  keyboard (3)]

$ xev
KeyPress event, serial 37, synthetic NO, window 0x7c00001,
    root 0x4e5, subw 0x0, time 188722500, (165,-16), root:(4636,676),
    state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x7c00001,
    root 0x4e5, subw 0x0, time 188722576, (165,-16), root:(4636,676),
    state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

在尝试实施@Raffa 的建议时,我使用“3”作为键盘 ID,并将键码保留为 38。但是,键仍然重复。

keyboard xmodmap xdotool xbindkeys
  • 1 个回答
  • 326 Views
Martin Hope
menteith
Asked: 2019-11-02 09:22:34 +0800 CST

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

  • 2

当我将以下行放入~/.xbindkeysrcGNOME 时,正确启动 application 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
gnome scripts command-line bash xbindkeys
  • 2 个回答
  • 901 Views
Martin Hope
Welat
Asked: 2019-04-17 02:38:37 +0800 CST

如何为 Trackpoint、Trackpad 和 Mouse 分别设置 xbindkey?

  • 1

我在 kUbuntu 18.04 上通过 xbindkeys 配置了我的 Logitech MX-Revolution 鼠标。我在滚轮(左/右滑动)上设置了额外的按钮来播放下一首/上一首歌曲。

我的问题是,我的罗技鼠标上的按键映射相当于在我的触控板上向左/向右滚动(手指滑动)。由于我的联想 Thinkpad 也有一个带有物理鼠标按钮的轨迹点,所以它也相当于在向左/向右移动轨迹点的同时按下鼠标中键。

我如何告诉 xbindkeys,如果我在 Logitech 鼠标上使用按键事件,它应该只播放下一首/上一首歌曲?如何为不同的输入设备分别设置 xbindkeys?

这是我的 .xbindkeysrc 文件:

######### MultimediaControl #########

# backward button => previous song       
"xte 'key XF86AudioPrev'"                
   m:0x0 + b:6                                   

# forward button => next song            
"xte 'key XF86AudioNext'"                
   m:0x0 + b:7

#################################

提前致谢!

mouse multimedia touchpad logitech xbindkeys
  • 1 个回答
  • 852 Views
Martin Hope
sleeply4cat
Asked: 2019-04-11 05:09:57 +0800 CST

将图形输入板按钮重新映射到键盘快捷键的问题

  • 1

我有一个便宜的 xp-pen 平板电脑,有 8 个额外的按钮。我想将它们映射到键盘快捷键,例如 Ctrl-Z,以便与 Krita/Gimp/etc 一起使用,但供应商的实用程序更像是一个概念验证。

我也尝试使用这里建议的 EasyStroke ,但是,呃。

xinput 将键盘识别为具有 12 个按钮的鼠标。我的计划是:

  • 如那里所述,将平板电脑按钮重新映射到 100-107
  • 通过 xbindkeys 捕获事件
  • 根据活动窗口确定当前配置文件
  • 通过 xev 或 xdotool 模拟击键
  • [额外] 通过 udev 规则或类似的东西激活/停用这辆自行车

简单的情况下一切正常,例如键入键号,但更复杂的情况下“粘”键失败。

我将我的作品上传到 git repo。默认配置文件适用于 xdotool 和 xte 变体,krita 和 gimp 配置文件在这两种情况下都不起作用。

我在 handler.sh 中记录了事件,发现 xbindkeys 在执行 krita 或 gimp 配置文件后“丢失”了一些发布事件,但在默认情况下运行良好。我认为这可能是由于处理程序执行时间过长,并在单独的进程中启动它,但这并没有改变任何东西。

嗯..这个问题的原因可能是什么?

shortcut-keys mouse xbindkeys
  • 1 个回答
  • 880 Views
Martin Hope
Torben Gundtofte-Bruun
Asked: 2019-01-09 14:04:38 +0800 CST

使用使用 xbindkeys 启动的脚本更改全局环境变量?

  • 1

TLDR:

  • 我有一个简单的 shell 脚本,可以根据当前值将环境变量从 value 翻转foo为,或反过来。bar
  • 我F12用来触发这个脚本,我知道它有效。
  • 当脚本被触发时,脚本结束时新值不会持续存在。

我究竟做错了什么?

细节:

1.脚本:

我的脚本检查环境变量是否存在,如果缺少则创建它:
if [ -z $COLEMAK ];then export COLEMAK="qwerty";fi

然后脚本将值从原来的值翻转到另一个值:
if [ "$COLEMAK" == "qwerty" ] then export COLEMAK="colemak" ; xmodmap ~/colemak.map else export COLEMAK="qwerty" ; xmodmap ~/qwerty.map fi

请注意,除了翻转变量值之外,脚本还用于xmodmap将键盘从一种布局重新映射到另一种布局。这是脚本的核心目的,这就是我想从功能键触发它的原因。

我知道这个脚本只有在它被来源(. ~/foo.sh)时才有效,并且在虚拟终端上运行良好。到目前为止,一切都很好。

2. xbindkeys:

我已经配置.xbindkeysrc.scm为包含(xbindkey '(F12) "term &")并在我按下时正确执行命令F12。到目前为止,一切都很好。

我将该行修改为(xbindkey '(F12) ". ~/foo.sh &"). 我知道脚本会运行,因为当我按下时它会写入一条日志行F12,但是在脚本结束后环境变量的更改不会持续存在。

scripts bash environment-variables xbindkeys
  • 1 个回答
  • 191 Views
Martin Hope
James Wang
Asked: 2018-12-13 17:18:16 +0800 CST

如何交换我的退格和反斜杠?

  • 3

我想要这样:

BackSpace -> 反斜杠

Shift + BackSpace -> 栏

反斜杠 - > BackSpace

我尝试使用 xbindkeys 和 xdotool,但我无法让它工作。这是我在 .xbindkeysrc 文件中的内容:

"xdotool key bar"
  shift + BackSpace
"xdotool key backslash"
  BackSpace
"xdotool key BackSpace"
  backslash

然而,这一切只会让我的钥匙停止工作。

keyboard xbindkeys
  • 1 个回答
  • 2329 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve