Tự động tắt bàn phím laptop khi gắn bàn phím rời trên Linux
Có ai như mình không, đặc biệt rất thích mang laptop ra cafe ngồi gõ, không những thế mà lại còn thích dùng cả phím cơ nữa chứ. Thế nhưng đời không như là mơ, có những quán cà phê với bàn và diện tích rất nhỏ, thế nên việc để phím cơ lên laptop sẽ gây ra một tình trạng muôn thuở đó là...
Câu chuyện cấn phím 😵💫
Dẫn nhập
Và bài viết này, với một trick nhỏ sẽ giúp mọi người dứt điểm được tình trạng đó, bằng cách chạy script với duy nhất 1 logic đơn giản là:
- Tắt phím internal của laptop khi phát hiện keyboard cần tìm được gắn vào
- Bật lại phím internal của laptop khi keyboard cần tìm bị rút ra
Setup script theo logic đã đề cập
1. Tìm tên bàn phím
Trước tiên thì gõ lệnh đơn giản sau để tìm tên bàn phím của các bạn trước đã:
xinput list
Đây là mẫu output của laptop mình:
Okay bây giờ thì ta sẽ chỉ cần quan tâm đến cái nhánh có tên là Virtual core keyboard thôi nha:
- Thằng XTEST thì không cần quan tâm tới
- Và bàn phím internal của laptop sẽ có tên kiểu kiểu như đây: (thường là giống y chang)
AT Translated Set 2 keyboard
- Tiếp đến, là bàn phím rời thường ở dưới cùng của mục, như của mình là Evision AKKO Keyboard, nhưng của các bạn sẽ là một cái tên khác, thường thì ta sẽ nhận qua brand bàn phím là nhanh nhất, như của mình là kit AKKO thì thấy có AKKO là xúc thôi.
Nếu không chắc chắn về tên phím rời của mình lắm thì các bạn có thể làm cái trò là: ngắt kết nối với phím rời, gõ
xinput list
lần 1, sau đó kết nối rồi gõxinput list
lần thứ 2 để check sự khác biệt ở hai output
Chúng ta note những cái tên này lại nha 😀
2. Tạo script thôi
Đầu tiên thì mình tạo file script tên tùy thích:
touch disable_laptop_keyboard.sh
chmod +x disable_laptop_keyboard.sh # để cấp quyền execute cho em nó
Thêm nội dung sau vào file disable_laptop_keyboard.sh
:
Thay đổi giá trị tên bàn phím rời đã note ở bước 1 trong function
check_external_keyboard
. Check lại xem củaAT_KEYBOARD_ID
có trùng khớp với giá trị bên trên không, không thì mình chủ động đổi nhé.
#!/bin/bash
# check xem ban phim roi co duoc ket noi khong
check_external_keyboard() {
xinput list | grep -q 'Evision AKKO Keyboard'
}
# id cua ban phim internal trong laptop
AT_KEYBOARD_ID='AT Translated Set 2 keyboard'
while true; do
if check_external_keyboard; then
xinput disable "$AT_KEYBOARD_ID"
else
xinput enable "$AT_KEYBOARD_ID"
fi
sleep 1
done
Giải thích từng bước:
- Đầu tiên mình check tên phím đã noted ở bước 1 có tồn tại trong
xinput list
không bằng cách đơn giản sau:- Mình đóng function cho lệnh này để check xem output có là empty hay không
xinput list | grep -q 'Evision AKKO Keyboard'
- Gán biến internal laptop vào trong script
Thường thì chỉ khi giá trị mà bạn đã check khác thì mới cần thay đổi bước này
AT_KEYBOARD_ID='AT Translated Set 2 keyboard'
- Sau đó thì ta tiến hành thực hiện logic đã đề cập ở phần dẫn nhập:
- Tắt phím internal của laptop khi phát hiện keyboard cần tìm được gắn vào, tức là
if check_external_keyboard; then
thực hiện tắt phím bằng lệnh sau:
if check_external_keyboard; then
xinput disable "$AT_KEYBOARD_ID"
- Bật lại phím internal của laptop khi keyboard cần tìm bị rút ra, tức là
else
thực hiện bật phím bằng lệnh sau:
else
xinput enable "$AT_KEYBOARD_ID"
- Thực hiện việc check như này liên tục mỗi giây 1 lần, hoặc realtime thì bạn bỏ
sleep 1
trong script nhé.
3. Thêm vào startup script
Ubuntu, Debian
- Mở Startup Applications qua Activities (nhấn Super). Hoặc đơn giản hơn là nhấn Alt+F2 và gõ lệnh gnome-session-properties và nhấn Enter.
- Nhấp vào Add và nhập đường dẫn của file script vừa tạo tại mục Command, đặt tên tùy thích, sau đó nhấn Save.
- Khởi động lại là xong.
Các distro khác
- Move file script đã tạo vào
/etc/init.d/
:
sudo mv ./disable_internal_keyboard.sh /etc/init.d/disable_internal_keyboard
Lưu ý là khi move vào mình bỏ cái đuôi sh cho tiện gọi nha
- Update cho script này chạy startup (dùng cái tên script đã bỏ đuôi
.sh
ban nãy:
sudo update-rc.d disable_internal_keyboard defaults 100
Nếu cần thay đổi, thì con số 100 tức là thứ tự chạy script startup của mình thôi, mình hay dùng
100, 101, 102,...
.
- Reboot lại test thử thôi
sudo reboot
Chúc các bạn thành công nhé 🎉
All rights reserved