Điều quan trọng đầu tiên cần nhớ là vô hiệu hóa lặp lại khóa trên mọi thứ đang xử lý tổ hợp phím của bạn, kể cả trên máy ảo hoặc phiên RDP mà bạn đang kết nối, cũng như máy chủ cấp cao nhất. Điều này không khắc phục được máy mục tiêu cuối cùng nhưng nó giúp cải thiện tình hình rất nhiều.
Đối với máy mục tiêu:
Có những báo cáo rằng việc sử dụng ssh để kết nối với cổng SSH của HP iLO sẽ tránh được các sự cố lặp lại chính, nhưng tôi không thể sử dụng phương pháp này vì máy chủ của tôi (online.net) đã không cho phép cổng 22 thông qua tường lửa iLO của họ. Nhưng nếu bạn có quyền truy cập vào cổng SSH của iLO (có thể là 22), thì đó có vẻ là cách tiếp cận dễ nhất.
Tôi đã thử sử dụng một đơn vị systemd để đặt tốc độ lặp lại của bàn phím và thời gian trễ khi khởi động:
# 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
(Hãy chắc chắn /sbin/kbdrate
là nơi bạn cókbdrate
. Viết cho /etc/systemd/systemd/slower-keyboard-repeat.service
và systemctl daemon-reload && systemctl enable slower-keyboard-repeat.service
)
nhưng như đã đề cập trong bình luận, đây chỉ là một phần thành công vì nó yêu cầu khởi động lại để đặt tốc độ lặp lại trên bàn phím mới mà iLO đính kèm. Nhưng nó là đủ tốt nếu bạn ổn với việc khởi động lại máy.
Cuối cùng, tôi đã kết thúc việc vá nhân Linux để thay đổi tốc độ lặp lại mặc định và thời gian trễ trên tất cả các bàn phím:
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
và điều đó đã giải quyết vấn đề cho tôi.