0
sudo dmesg -w|grep "Manufacturer: Keychron K1"| xargs -I{} xset r rate 250 70

它不起作用,为什么?

我正在尝试在重新连接键盘时重置键盘设置,但我无法让dmesg -w|xargs...组合工作。它应该可以工作,例如,如果我这样做:

while :; do echo tick; sleep 1s; done|xargs -I{} date

我将每秒打印一个新时间。dmesg -w当时的想法是使用grep,但直到从另一个终端被杀死后xargs它才起作用。xargs

为什么以及如何解决?

4

2 回答 2

0

您在这里问的是 XY(Z) 问题,请参阅“什么是 XY 问题? ”。

您的问题X是“如何在热插拔时自动在 Xorg 中配置输入设备?”

为此,您只需编写一个xorg.conf.d InputClass规则,该规则将为您的键盘进行适当的设置:

https://www.x.org/releases/current/doc/man/man5/xorg.conf.5.xhtml#heading9


但是,您将此问题误认为是问题Y “如何在热插拔时自动执行程序?” – 为此我们有 UDev

对于该问题,请查看 UDev 规则:https ://wiki.archlinux.org/title/Udev


然而,将问题 Y 误认为是“问题”Z“如果管道重定向,当某个字符串出现时,我如何执行链的最后一部分”。解决这个问题并不能解决您的实际问题。

这个

sudo dmesg -w | grep … | xargs …

将三个同时执行的程序连接在一起。xargs等待输入结束,然后执行作为参数传递给它的任何内容。当然dmesg -w永远不会产生文件结尾。

于 2022-01-20T18:11:09.200 回答
0

为什么

缓冲。

怎么修?

stdbuf使用或设置工具的行缓冲grep --line-buffered

于 2022-01-20T19:49:13.137 回答