Czy istnieje sposób na wyłączenie wewnętrznej klawiatury laptopa?

85

Tydzień temu rozlałem zawartość kubka na klawiaturę laptopa. Połowa kluczy już nie działa, z wyjątkiem jednego! Litera Q, która jest bardzo aktywna regularnie.

To bardzo niepokojące, gdy pracuję.

Czy istnieje sposób na wyłączenie wewnętrznej klawiatury laptopa?

Czy to możliwe xmodmap?

atmon3r
źródło
Jakiej marki i modelu jest laptop?
Mitch
jestHP pavilion dv9000
atmon3r
5
Najprostszym sposobem byłoby podniesienie klawiatury i odłączenie jej od płyty głównej. Następnie możesz odłożyć go z powrotem tam, gdzie był, bez połączenia. W ten sposób klawiatura zostanie wyłączona po ponownym zainstalowaniu i nie będziesz musiał zawracać sobie głowy oprogramowaniem. Zobacz ten link, mniej więcej w połowie strony, na której znajduje się klawiatura: insidemylaptop.com/…
Mark Paskal
Warto też go wyjąć, rozebrać na części, oczyścić między warstwami ..
JonasCz

Odpowiedzi:

135

Możesz użyć, xinputaby przenieść urządzenie wejściowe pod X.

  1. Wykonaj polecenie, xinput listaby wyświetlić listę urządzeń wejściowych.
  2. Znajdź AT Translated Set 2 keyboardi zanotuj jego idnumer; zostanie to użyte do wyłączenia klawiatury. Zwróć także uwagę na numer na końcu [slave keyboard (#)]; jest to numer identyfikacyjny master, który będzie używany do ponownego włączenia klawiatury.
  3. Aby wyłączyć klawiaturę, wykonaj polecenie xinput float <id#>, gdzie <id#>jest numer identyfikacyjny klawiatury. Na przykład, jeśli idbyło 10, to polecenie będzie xinput float 10.
  4. Aby ponownie włączyć klawiaturę, wykonaj polecenie xinput reattach <id#> <master#>, gdzie masterjest zapisany drugi numer. Więc jeśli 3byłby to numer , zrobiłbyś xinput reattach 10 3.

Oto demonstracja:

Lista xinput $
⎡ Identyfikator wirtualnego wskaźnika rdzenia = 2 [wskaźnik główny (3)]
↳ ↳ Wskaźnik wirtualnego rdzenia XTEST id = 4 [wskaźnik slave (2)]
⎜ ↳ SynPS / 2 Synaptics TouchPad id = 11 [wskaźnik slave (2)]
⎜ ↳ Logitech USB-PS / 2 Mouse Mouse id = 12 [wskaźnik slave (2)]
⎜ ↳ Logitech Unifying Device. Wireless PID: 4004 id = 13 [wskaźnik slave (2)]
⎣ Identyfikator wirtualnej klawiatury rdzenia = 3 [klawiatura główna (2)]
    ↳ Identyfikator klawiatury wirtualnego rdzenia XTEST = 5 [klawiatura podrzędna (3)]
    ↳ Przycisk zasilania id = 6 [klawiatura podrzędna (3)]
    ↳ Identyfikator magistrali wideo = 7 [klawiatura podrzędna (3)]
    ↳ Przycisk uśpienia id = 8 [klawiatura podrzędna (3)]
    ↳ Identyfikator kamery internetowej Acer CrystalEye = 9 [klawiatura podrzędna (3)]
    ↳ AT Translated Set 2 keyboard id = 10    [slave keyboard ( 3 )]
 $ xinput float 10 
$ xinput list
⎡ Identyfikator wirtualnego wskaźnika rdzenia = 2 [wskaźnik główny (3)]
↳ ↳ Wskaźnik wirtualnego rdzenia XTEST id = 4 [wskaźnik slave (2)]
⎜ ↳ SynPS / 2 Synaptics TouchPad id = 11 [wskaźnik slave (2)]
⎜ ↳ Logitech USB-PS / 2 Mouse Mouse id = 12 [wskaźnik slave (2)]
⎜ ↳ Logitech Unifying Device. Wireless PID: 4004 id = 13 [wskaźnik slave (2)]
⎣ Identyfikator wirtualnej klawiatury rdzenia = 3 [klawiatura główna (2)]
    ↳ Identyfikator klawiatury wirtualnego rdzenia XTEST = 5 [klawiatura podrzędna (3)]
    ↳ Przycisk zasilania id = 6 [klawiatura podrzędna (3)]
    ↳ Identyfikator magistrali wideo = 7 [klawiatura podrzędna (3)]
    ↳ Przycisk uśpienia id = 8 [klawiatura podrzędna (3)]
    ↳ Identyfikator kamery internetowej Acer CrystalEye = 9 [klawiatura podrzędna (3)]
∼ AT Translated Set 2 keyboard id = 10 [floating slave]
$ xinput podłącz ponownie 10 3 
$ xinput list
⎡ Identyfikator wirtualnego wskaźnika rdzenia = 2 [wskaźnik główny (3)]
↳ ↳ Wskaźnik wirtualnego rdzenia XTEST id = 4 [wskaźnik slave (2)]
⎜ ↳ SynPS / 2 Synaptics TouchPad id = 11 [wskaźnik slave (2)]
⎜ ↳ Logitech USB-PS / 2 Mouse Mouse id = 12 [wskaźnik slave (2)]
⎜ ↳ Logitech Unifying Device. Wireless PID: 4004 id = 13 [wskaźnik slave (2)]
⎣ Identyfikator wirtualnej klawiatury rdzenia = 3 [klawiatura główna (2)]
    ↳ Identyfikator klawiatury wirtualnego rdzenia XTEST = 5 [klawiatura podrzędna (3)]
    ↳ Przycisk zasilania id = 6 [klawiatura podrzędna (3)]
    ↳ Identyfikator magistrali wideo = 7 [klawiatura podrzędna (3)]
    ↳ Przycisk uśpienia id = 8 [klawiatura podrzędna (3)]
    ↳ Identyfikator kamery internetowej Acer CrystalEye = 9 [klawiatura podrzędna (3)]
    ↳ AT Translated Set 2 keyboard id = 10 [slave keyboard (3)]
Ignacio Vazquez-Abrams
źródło
Interesuje mnie to rozwiązanie! mój xinput pastebin.com/puDxQaZ8, więc chyba tak by było: xinput float 14To zapytanie jest odwracalne? jak włączyć klawiaturę po tym?
atmon3r
2
Należy użyć reattachargumentu do jej nałożenia. xinput reattach 14 3
Ignacio Vazquez-Abrams,
1
Idealna odpowiedź - też tego szukałem. którykolwiek z klawiszy na moim laptopie przestał działać, więc teraz trzymaj nad nim zewnętrzną klawiaturę i ciągle naciskałem klawisz kontrolny, a co nie. To naprawiło to, dzięki!
tipsy
1
Dzięki. Ale po ponownym uruchomieniu laptopa klawiatura jest włączana automatycznie. Dlatego cały czas, gdy jestem na swoim komputerze, chcę wykonać powyższe kroki, aby wyłączyć wspomnianą przez ciebie klawiaturę wewnętrzną. Czy są jakieś możliwości trwałego wyłączenia?
Dinesh ML
2
Czy Xinput nie wyłączałby / nie zrobiłby tego samego?
SomeNickName,
18

Oto mały przycisk przełącznika, aby włączyć lub wyłączyć określoną klawiaturę. Najpierw musisz znaleźć swój identyfikator klawiatury za pomocą xinputlub xinput-list.

Skrypt Bash, aby włączyć / wyłączyć klawiaturę

#!/bin/bash
Icon="/PATH/TO/ICON_ON"
Icoff="/PATH_TO_ICON_OFF"
fconfig=".keyboard" 
id=12

if [ ! -f $fconfig ];
    then
        echo "Creating config file"
        echo "enabled" > $fconfig
        var="enabled"
    else
        read -r var< $fconfig
        echo "keyboard is : $var"
fi

if [ $var = "disabled" ];
    then
        notify-send -i $Icon "Enabling keyboard..." \ "ON - Keyboard connected !";
        echo "enable keyboard..."
        xinput enable $id
        echo "enabled" > $fconfig
    elif [ $var = "enabled" ]; then
        notify-send -i $Icoff "Disabling Keyboard" \ "OFF - Keyboard disconnected";
        echo "disable keyboard"
        xinput disable $id
        echo 'disabled' > $fconfig
fi

Konfiguracja

  • Iconjako ścieżka ikony wyświetlanej po włączeniu (na przykład /home/user/path/icon.png)
  • Icoff jako ścieżka ikony wyświetlanej podczas wyłączania
  • Użyłem następujących ikon: wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

  • idjako identyfikator klawiatury (znaleziono z xinput)

  • fconfigścieżka do pliku konfiguracyjnego. Zmień, jeśli chcesz utworzyć plik konfiguracyjny w innym katalogu

Nie próbuj uruchamiać skryptu, jeśli nie możesz go uruchomić ponownie bez użycia klawiatury (chyba że masz oczywiście inną klawiaturę). Utwórz następujący program uruchamiający (w home/user/.local/share/applications) i dodaj go do jedności:

Wpis na pulpicie (program uruchamiający Unity)

[Desktop Entry]
Version=1.0
Type=Application
Name=Clavier ON-OFF
Icon=PATH/TO/YOUR/ICON
Exec=bash NAME_OF_YOUR_SCRIPT.sh
Path=PATH/TO/YOUR/SCRIPT
NoDisplay=false
Categories=Utility;
StartupNotify=false
Terminal=false

WYNIK:

Wyrzutnia:

wprowadź opis zdjęcia tutaj

Powiadomienia:

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

mxdsp
źródło
Działa to dobrze, dziękuję za jasne wyjaśnienie. Jest jedna rzecz, której nie rozumiem: jak zmienić ikonę zgodnie z logiką skryptu powłoki. Myślę, że to częściowo określone przez „Icon = PATH / TO / YOUR / ICON” we wpisie Desktop, użyłem ścieżki bezwzględnej, „/home/.../icon_on.png”, ponieważ nie wiem, jak inaczej aby użyć pliku „.desktop”, chociaż widzę, że może to uniemożliwić zmianę ikon. Czy ktoś mógłby podać jakąś wskazówkę?
Maskonur
1
Cześć, masz rację co do bezwzględnej ścieżki w pliku .desktop. Przepraszam, ale nie wiem, jak wprowadzić dynamiczne zmiany w ikonie programu uruchamiającego. Zgodnie z tą odpowiedzią wcale nie jest możliwe: askubuntu.com/a/244951/458410 . Ikona w moim skrypcie zmienia się tylko w powiadomieniach.
mxdsp,
Ach, ok, to ma sens, moje robi to samo, dziękuję.
Maskonur
Ewentualna poprawa: zamiast zapisywania stanu w pliku można sprawdzić bezpośrednio, czy klawiatura jest wyłączony z tej opcji function is-disabled() { xinput --list --long | grep -A 1 "id=$1" | grep -q disabled }. W ten sposób wszystko działa, nawet jeśli klawiatura jest włączona / wyłączona przez inny program.
dshepherd
fconfig=".keyboard" if [ ! -f $fconfig ]; Co to jest .keyboard? A oba są fconfigi $fconfigsą takie same? A także co to ! -f $fconfigznaczy? Jestem nowy w skryptowaniu bash. Dzięki :)
sphoenix 16.09.17
12

Pomyślałem o 2 sposobach na zrobienie tego:

  1. Ustawiając zły model klawiatury laptopa w xorg.conf?

  2. Instalując Lock-keyboard-for-Baby

`Lock-keyboard-for-Baby lub w skrócie lk4b, to mały program, który blokuje klawiaturę, ale pozostawia mysz wolną. Napisałem to, ponieważ moja siostrzenica lubi walić w klawiaturę za każdym razem, gdy widzi, że siedzę przy niej. Klawisze wpisywane na klawiaturze mogą mieć katastrofalne konsekwencje i nie chciałem cały czas blokować ekranu wygaszaczem ekranu.

Po uruchomieniu blokada klawiatury dla dziecka otwiera małe okno, które chwyta klawiaturę i klawisze echa, które są wpisywane. Domyślnie mówi ci, co wpisać, aby wyjść („Quit Now”).

W przeciwieństwie do wygaszacza ekranu ekran nie jest blokowany, a mysz nadal częściowo działa, więc nadal możesz zobaczyć, co jest na ekranie - oglądaj telewizję / wideo i / lub czytaj dokument za pomocą myszy do przewijania. ”

Wymagania:

· GTK> = 2.x · Powiązania perl GTK2 (perl-gtk2 lub gtk2-perl w zależności od systemu)

LnxSlck
źródło
1
nie jest to dokładnie to, czego potrzebuję, muszę używać klawiatury USB, ale twój kod jest bardzo przydatny! ;)
atmon3r
Zablokuj klawiaturę dla dziecka pozwoli Ci wyłączyć wewnętrzną klawiaturę podczas korzystania z zewnętrznego
LnxSlck
Znakomity. Lock-Keyboard-For-Baby działa również w systemie Ubuntu 16.04. Wolę pisać za pomocą pióra i książki, trzymając ją na klawiaturze. To małe narzędzie rozwiązało mój problem. W przypadku innych może być konieczne uruchomienie sudo apt-get install libgtk2-perl przed uruchomieniem skryptu perl
mac
„Quit Now”, Quit Now lub quit now nie działa poniżej 18.04 z klawiaturą USB typu tower tower.
fleamour
10

Jednym pewnym sposobem na jego wyłączenie jest odłączenie kabla sygnałowego. W tym celu musisz otworzyć klawiaturę. Aby uzyskać informacje, jak to zrobić, zapoznaj się z Podręcznikiem konserwacji i serwisu komputera HP Pavilion dv9000 i dv9200 .

Teraz jest sposób na wyłączenie klawiatury za pomocą xinput. Aby to zrobić, wystarczy nacisnąć Ctrl+ Alt+ Tna klawiaturze, aby otworzyć Terminal. Po otwarciu uruchom poniższe polecenia.

Aby wyświetlić listę urządzeń X

xinput --list

Aby wyłączyć klawiaturę:

xinput set-int-prop 2 "Device Enabled" 8 0

Aby ponownie włączyć klawiaturę:

xinput set-int-prop 2 "Device Enabled" 8 1

Jeśli pojawi się błąd dotyczący uprawnień, użyj powyższych poleceń za pomocą sudo.

Mitch
źródło
5

Urządzenia idotrzymane z xinput listsugestii podanej w odpowiedzi są czasami w jakiś sposób zmieniane przy ponownym uruchomieniu (przynajmniej na moim komputerze), co powoduje wyłączenie niewłaściwego urządzenia.

Właśnie dlatego skończyłem używać device namezamiast idnp .:

xinput disable "AT Translated Set 2 keyboard"
Janot
źródło
5

Aby trwale wyłączyć wewnętrzną klawiaturę laptopa na Ubuntu, musisz przekazać i8042.nokbdparametry jądra, aby nie sprawdzać / tworzyć portu klawiatury

i8042.nokbd [HW] Don't check/create keyboard port

Otwórz terminal i uruchom następujące polecenie

$sudo gedit /etc/default/grub

Spróbuj znaleźć następujący wiersz

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Dodaj parametr i8042.nokbd, powyższa linia powinna wyglądać następująco

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.nokbd"

Zaktualizuj grub jako następujące polecenie

$sudo update-grub     

Następnie reboottwój laptop.

Rokibul Hasan
źródło
Jak ponownie włączyć klawiaturę?
Guilherme Parreira
4

Gdybym miał wyczyścić klawiaturę i dlatego zawsze musiałem wyłączyć maszynę. W związku z tym odkryłem to, aby tymczasowo wyłączyć klawiaturę:

$ xinput float id #; sleep t ; xinput reattach id # master #

t - czas spać w kilka sekund

id # i master # jak wspomniano powyżej ( góra strony )

na przykład w notatniku wpisałem:

$ xinput float 11;sleep 5;xinput reattach 11 3
Tyþë-Ø
źródło
3

Spróbuj uruchomić, xmodmap -e 'keycode 24='aby wyłączyć tylko klawisz Q. Jeśli to działa, możesz dodać go do pliku ~/.bashrcglobalnego /etc/bash.bashrc. Stąd pomysł , który pokazuje wszystkie mapowania klawiszy.

dxvxd
źródło
4
Czy nie wyłączałoby to qrównież klawiatury zewnętrznej?
Sparhawk
2

Za to, co jest warte, na podstawie poprzednich odpowiedzi i własnej zabawy, stworzyłem następujący skrypt, który nazywam toggle_keyboard.shi umieszczam na swojej ~/binścieżce. Mam skrót klawiaturowy, który uruchamia go ustawiony na CtrlWinK.

Niektóre problemy z poprzednimi odpowiedziami i zalety mojego skryptu:

  • Poleganie na numerze identyfikacyjnym z xinput kończy się niepowodzeniem po ponownym uruchomieniu komputera i zmianie numeru identyfikacyjnego. Zdarzyło mi się to podczas biegania xinput float 13. Skończyło się na wyłączeniu niewłaściwego sprzętu.
  • Poleganie na pliku w celu utrzymania stanu włączenia / wyłączenia zakończy się niepowodzeniem, jeśli zrestartujesz komputer. Plik powie ci, że klawiatura jest wyłączona (jeśli wyłączyłeś ją za pomocą skryptu), ale po ponownym uruchomieniu zostanie ponownie włączona. Moje rozwiązanie pobiera informacje o włączeniu / wyłączeniu z przeanalizowanego polecenia xinput.
  • Mój skrypt będzie działał z każdym urządzeniem xinput, które pojawia się podczas pisania xinput list --name-only. Po prostu uzyskaj nazwę i edytuj cztery najlepsze zmienne. Używam go do klawiatury laptopa, kamery internetowej, monitora z ekranem dotykowym i kilku innych rzeczy, z których korzystam tylko raz na jakiś czas.

#!/bin/bash
# Toggle the laptop keyboard either on or off and notify the user about it

# Device name can be found by typing this command: xinput list --name-only
DEVICE_NAME="AT Translated Set 2 keyboard"
# The display name of the device in the notify-send popup
DEVICE_DISPLAY_NAME="Laptop Keyboard"

# Set these to the icons you want to use.
# If they are not found, the notification will still work.
ICON_ENABLE="$HOME/.icons/keyboard.png"
ICON_DISABLE="$HOME/.icons/keyboard_disabled.png"

function xinput_set_prop() {
        xinput set-prop "$DEVICE_NAME" "Device Enabled" $1
}

function notify_change() {
        if [ -f "$1" ]; then
                notify-send --urgency=low --icon="$1" "$2"
        else
                notify-send --urgency=low "$2"
        fi
}

# Returns 1 if device is enabled, 0 if disabled
is_enabled=$(xinput list-props "$DEVICE_NAME" | grep "Device Enabled" | awk '{ print $4 }' | sed 's/[^0-9]*//g')

if [ $is_enabled -eq 1 ]; then
        # device is enabled, so disable it
        xinput_set_prop 0
        notify_change "$ICON_DISABLE" "$DEVICE_DISPLAY_NAME Disabled"
else
        # device is disabled, so enable it
        xinput_set_prop 1
        notify_change "$ICON_ENABLE" "$DEVICE_DISPLAY_NAME Enabled"
fi
cbp44
źródło
0

xinput float „AT Translated Set 2 keyboard”

Po wielu godzinach spędzonych przez lata na różnych metodach z różnymi dystrybucjami i wersjami. Powyższe polecenie terminalowe jest tym, na czym polegam po problemach ..... Używam tego teraz z plazmą neonową i używałem go miesiąc temu w prostej wersji Ubuntu 18.04. (wymaga zastosowania po ponownym uruchomieniu - można go uruchomić) * Moja wbudowana klawiatura w laptopie HP jest uszkodzona i zaczyna pisać, co powoduje poważne problemy - Używam bezprzewodowej klawiatury i myszy - touchpad jest włączony / wyłączony jako część paska górnego KDE opcje - neon / plazma 5). W ustawieniach systemu / autostart Plik tekstowy z następującym wierszem kodu jest zapisywany jako plik .sh i ustawiany jako plik wykonywalny (właściwości plików txt)
xinput float „AT Translated Set 2 keyboard”

Plik tekstowy otrzymuje nazwę> wyłączanie klawiatury> i jest umieszczany w trybie autostartu (wykonywalny) Po ponownym uruchomieniu / uruchomieniu systemu> wbudowana klawiatura jest wyłączona. (użyj listy xinput do przetestowania)

Duncan Williams
źródło