惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Know Your Adversary
Know Your Adversary
WordPress大学
WordPress大学
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
F
Fortinet All Blogs
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
J
Java Code Geeks
Vercel News
Vercel News
N
Netflix TechBlog - Medium
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
酷 壳 – CoolShell
酷 壳 – CoolShell
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
M
MIT News - Artificial intelligence
T
The Blog of Author Tim Ferriss
小众软件
小众软件
The GitHub Blog
The GitHub Blog
量子位
V
Visual Studio Blog
博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
C
CERT Recently Published Vulnerability Notes
The Cloudflare Blog
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
U
Unit 42
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
NISL@THU
NISL@THU
C
Cisco Blogs
T
Threatpost
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Secure Thoughts
The Hacker News
The Hacker News
Attack and Defense Labs
Attack and Defense Labs
IT之家
IT之家
Help Net Security
Help Net Security
G
GRAHAM CLULEY
Jina AI
Jina AI

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
Linux环境按键检测
2023-09-26 · via mephisto.cc

最近升级 labwc 到 v0.6.5 的的时候,发现截屏按键 print 怎么按都没有任何反应。

原因可能是:

  • 联动的截屏软件失效了;
  • 按键坏了;
  • 升级 labwc 导致的问题。

截屏软件我用的grip + slurp + ksnip的组合,通过调用 screenshot.sh 脚本实现,实测没有问题。

1pwd
2/home/mephisto/.config/labwc
3➜  cat screenshot.sh
4#!/bin/sh
5NOW=$(date +"%Y-%m-%d-%H%M%S")
6grim -g "$(slurp )" -t png $HOME/Pictures/grim-$NOW.png
7QT_QPA_PLATFORM=xcb /usr/bin/ksnip $HOME/Pictures/grim-$NOW.png

难道是按键坏了?我 ¥1800 的装备,一个按键好歹值个几美元,没这么容易罢工吧!

问题是,Linux 环境下怎么检测 print 键是否有效呢?此时我想到了 xev 和 wev,分别对应 X 和 Wayland 环境下面的事件检测。 悲剧的是,用这个两个命令行工具检测,唯独 print 按键按下什么输出都没有。我甚至把键帽扣动按了按,结果一样无任何反应!

无奈之下,只能回退 labwc,重新登录后,一切正常。这玩笑开大了,居然会有这种神奇问题,针对特定按钮,定点狙击啊。

普通人这个时候可能就不再追究了,而我晚上睡觉时都在想,怎么能方便检测按键有效呢?

总结如下:

1. 使用 xev 和 wev

X 环境使用 xev, Wayland 使用 wev,虽然我的问题由于特殊未知这个不能检测,但是还是非常有用的。

如下所示,我按了 Enter 和 1 旁边的那个按键(它叫 grave,我是看下面的输出才知道的 😊) 会实时显示出按键核心信息,按键名、key 等,按压和松开是各显示一条。

 1➜  ~ wev
 2[07:         wl_seat] name: seat0
 3[07:         wl_seat] capabilities: pointer keyboard
 4[10:    xdg_toplevel] configure: width: 0; height: 0
 5[09:     xdg_surface] configure: serial: 39874
 6[14:     wl_keyboard] keymap: format: 1 (xkb v1), size: 63738
 7[14:     wl_keyboard] repeat_info: rate: 25 keys/sec; delay: 600 ms
 8[14:     wl_keyboard] enter: serial: 39879; surface: 3
 9'                     sym: Return       (65293), utf8: '
10[14:     wl_keyboard] modifiers: serial: 0; group: 0
11                      depressed: 00000000
12                      latched: 00000000
13                      locked: 00000000
14[11:  wl_data_device] data_offer: id: 4278190080
15[4278190080:   wl_data_offer] offer: mime_type: TEXT
16[4278190080:   wl_data_offer] offer: mime_type: text/plain
17[4278190080:   wl_data_offer] offer: mime_type: text/plain;charset=utf-8
18[4278190080:   wl_data_offer] offer: mime_type: STRING
19[4278190080:   wl_data_offer] offer: mime_type: UTF8_STRING
20[11:  wl_data_device] selection: id: 4278190080
21[13:      wl_pointer] enter: serial: 39882; surface: 3, x, y: 197.863281, 79.218750
22[13:      wl_pointer] frame
23[10:    xdg_toplevel] configure: width: 0; height: 0
24                      activated
25[09:     xdg_surface] configure: serial: 39877
26[14:     wl_keyboard] key: serial: 39883; time: 24157739; key: 36; state: 0 (released)
27                      sym: Return       (65293), utf8: ''
28[14:     wl_keyboard] key: serial: 39884; time: 24162044; key: 49; state: 1 (pressed)
29                      sym: grave        (96), utf8: '`'
30[14:     wl_keyboard] key: serial: 39885; time: 24162200; key: 49; state: 0 (released)
31                      sym: grave        (96), utf8: ''
32[14:     wl_keyboard] key: serial: 39886; time: 24172492; key: 36; state: 1 (pressed)
33'                     sym: Return       (65293), utf8: '
34[14:     wl_keyboard] key: serial: 39887; time: 24172621; key: 36; state: 0 (released)
35                      sym: Return       (65293), utf8: ''
36[14:     wl_keyboard] key: serial: 39888; time: 24183338; key: 49; state: 1 (pressed)
37                      sym: grave        (96), utf8: '`'
38[14:     wl_keyboard] key: serial: 39889; time: 24183480; key: 49; state: 0 (released)

2. 使用 showkey 命令

如果你已经进入系统图形界面,需要运行sudo showkey, 如下操作所示 99 是 print 键。

 1➜  ~ sudo showkey
 2[sudo] password for mephisto:
 3kb mode was ?UNKNOWN?
 4[ if you are trying this under X, it might not work
 5since the X server is also reading /dev/console ]
 6
 7press any key (program terminates 10s after last keypress)...
 8keycode  28 release
 9keycode  99 press
10keycode  99 release
11keycode  99 press
12keycode  99 release
13keycode   1 press
14keycode   1 release

如果在终端环境(可按Ctl + Alt + F1-F7, F1-F7 选一个切换到终端环境测试),输入密码后直接运行即可,无需 sudo。此时任何按键都会被拦截,只能等 10s 自动退出,不曾体验过。

也就是说,showkey 才是大招,不受各种环境影响,能用于检测按键是是否物理损坏了。

有人会问,我直接找个能输入字符的地方打字,眼睛看屏幕字符是否正确不就好了吗?这种不能检测各种功能按键比如 print

还有人会说,我是嵌入式工程师,写程序检测解决,的确可以。但 showkey 已经存在很久,拿来使用不耽误时间。

总结,简单键盘检测用 xev 和 wev,特殊情况下用 showkey。

最后说明,新版本的 labwc 触发截图无效,估计是加发脚本 screenshot.sh 的时候就有异常了,没有简单调试方法,先回退解决,labwc 是个二进制程序,直接替换,并不不麻烦。