สิ่งสำคัญแรกที่ต้องจำคือการปิดใช้งานการทำซ้ำแป้นบนทุกสิ่งที่ประมวลผลการกดแป้นพิมพ์ของคุณรวมถึงเครื่องเสมือนหรือเซสชัน RDP ที่คุณกำลังเชื่อมต่อตลอดจนเครื่องโฮสต์ระดับบนสุด สิ่งนี้ไม่ได้แก้ไขเครื่องเป้าหมายสุดท้าย แต่มีประโยชน์อย่างมากในการปรับปรุงสถานการณ์
สำหรับเครื่องเป้าหมาย:
มีรายงานว่าการใช้ ssh เพื่อเชื่อมต่อกับพอร์ต SSH ของ HP iLO หลีกเลี่ยงปัญหาการทำซ้ำที่สำคัญ แต่ฉันไม่สามารถใช้วิธีนี้ได้เพราะโฮสต์ของฉัน (online.net) ไม่อนุญาตให้พอร์ต 22 ผ่านไฟร์วอลล์ iLO แต่ถ้าคุณเข้าถึงพอร์ต SSH ของ iLO (น่าจะเป็น 22) นั่นเป็นวิธีที่ง่ายที่สุด
ฉันพยายามใช้ systemd unit เพื่อกำหนดอัตราการทำซ้ำของแป้นพิมพ์และเวลาหน่วงในการบู๊ต:
# Note that kbdrate only affects existing keyboards, and HP iLO attaches a new
# USB keyboard when you connect, so you may have to reboot (with the iLO console
# attached) to get the keyboard delay and repeat rate to take effect.
[Unit]
Description=Set longer delay time for key repeat
[Service]
Type=oneshot
RemainAfterExit=yes
StandardInput=tty
StandardOutput=tty
ExecStart=/sbin/kbdrate -d 1000 -r 2
[Install]
WantedBy=multi-user.target
WantedBy=rescue.target
(ตรวจสอบให้แน่ใจว่า/sbin/kbdrate
เป็นที่ที่คุณมีkbdrate
เขียนถึง/etc/systemd/systemd/slower-keyboard-repeat.service
และsystemctl daemon-reload && systemctl enable slower-keyboard-repeat.service
)
แต่ดังที่กล่าวไว้ในความคิดเห็นนี่เป็นเพียงบางส่วนที่ประสบความสำเร็จเพราะต้องรีบูตเพื่อกำหนดอัตราการทำซ้ำบนแป้นพิมพ์ใหม่ที่ iLO ติด แต่มันจะดีพอถ้าคุณโอเคกับการรีบูตเครื่อง
ในที่สุดฉันก็ลงแพทช์เคอร์เนล Linux เพื่อเปลี่ยนอัตราการทำซ้ำเริ่มต้นและเวลาหน่วงบนคีย์บอร์ดทั้งหมด:
From 78c32f539b89bf385985bea47a7058a540d31da0 Mon Sep 17 00:00:00 2001
From: Ivan Kozik <ivan@ludios.org>
Date: Thu, 30 Mar 2017 13:31:17 +0000
Subject: [PATCH] Increase the default keyboard repeat delay from 250ms to
1000ms and repeat rate from 1000/33 Hz to 1000/500 Hz to avoid unintentional
repeated keystrokes when using remote consoles such as HP iLO over
high-latency links. These consoles (HP iLO included) often transmit key
states (up/down) instead of keystrokes, making it impossible to even enter a
password and log in.
Fixing this in the kernel avoids problems with kbdrate where the parameters
passed to kbdrate don't apply to the new keyboards attached by HP iLO.
---
drivers/input/input.c | 2 +-
drivers/input/keyboard/atkbd.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 880605959aa6..a195af2d062a 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -2126,7 +2126,7 @@ int input_register_device(struct input_dev *dev)
* is handled by the driver itself and we don't do it in input.c.
*/
if (!dev->rep[REP_DELAY] && !dev->rep[REP_PERIOD])
- input_enable_softrepeat(dev, 250, 33);
+ input_enable_softrepeat(dev, 1000, 500);
if (!dev->getkeycode)
dev->getkeycode = input_default_getkeycode;
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index ec876b5b1382..9dd04c2215b3 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -1096,8 +1096,8 @@ static void atkbd_set_device_attrs(struct atkbd *atkbd)
BIT_MASK(LED_MUTE) | BIT_MASK(LED_MISC);
if (!atkbd->softrepeat) {
- input_dev->rep[REP_DELAY] = 250;
- input_dev->rep[REP_PERIOD] = 33;
+ input_dev->rep[REP_DELAY] = 1000;
+ input_dev->rep[REP_PERIOD] = 500;
}
input_dev->mscbit[0] = atkbd->softraw ? BIT_MASK(MSC_SCAN) :
--
2.11.0
และนั่นแก้ไขปัญหาให้ฉัน