Nonaktifkan input Keyboard & Mouse di unix (di bawah X)

28

Bagaimana seseorang bisa secara program "membekukan" Keyboard & Mouse sementara, sehingga tidak ada yang bisa mengacaukan sistem?

Ada beberapa kemungkinan di mana ini berguna. Misalnya, saya punya laptop dan saya ingin memastikan tidak ada yang menggunakannya saat saya pergi, bahkan jika ada yang tahu kata sandi atau bisa menebaknya (seperti istri atau anak-anak), serta menekan nafsu makan pencuri (seperti yang terlihat -fungsi). atau saya melakukan sesuatu dari jarak jauh jadi saya ingin memastikan pengguna di komputer tidak mengganggu.

Philomath
sumber
4
Terkait: pertanyaan serupa di OSX
Gilles 'SO- stop being evil'

Jawaban:

24

Dengan asumsi GUI Anda berbasis X (karena hampir semua GUI UNIX), gunakan xinput.

Pertama, daftarkan perangkat Anda:

$ xinput --list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Windows mouse                             id=6    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
↳ Windows keyboard                          id=7    [slave  keyboard (3)]

Tuliskan detail untuk mouse Anda (id = 6 pada contoh kami):

$ xinput --list-props 6
Device 'Windows mouse':
    Device Enabled (112):   1
    Coordinate Transformation Matrix (114): 1.000000, 0.000000, 0.000000, 0.000000,   1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (222):     0
    Device Accel Constant Deceleration (223):       1.000000
    Device Accel Adaptive Deceleration (224):       1.000000
    Device Accel Velocity Scaling (225):    10.000000

Sekarang nonaktifkan:

$ export DISPLAY=:0
$ xinput set-int-prop 6 "Device Enabled" 8 0

Untuk mengaktifkannya lakukan:

$ xinput set-int-prop 6 "Device Enabled" 8 1

Hal yang sama berlaku untuk keyboard, cukup ganti nomor int-prop dengan id yang tepat.
Diuji dan bekerja pada cygwin.

Tentu saja, Anda harus merencanakan terlebih dahulu bagaimana Anda akan mengaktifkan perangkat Anda lagi. seperti menjadwalkannya di cron, mengaktifkannya kembali dari jarak jauh, atau menonaktifkan hanya satu di antaranya.

Philomath
sumber
Tidak ada jawaban lain di sini yang menjawab pertanyaan itu.
Philomath
Dalam kasus saya, perintah untuk menonaktifkan mouse terlihat seperti ini: xinput set-int-prop 9 "Device Enabled" 8 0- saja, 1) Saya juga ingin menyembunyikan pointer mouse, dan 2) jika saya beralih dari X ke tty (Linux console / VTs), dan lalu kembali ke X, ini diatur ulang ( xinput list-props 9mengkonfirmasi ini).
Emanuel Berg
Bisakah saya menonaktifkan perangkat "master pointer"?
ed22
14

xinput --set-int-propsudah ditinggalkan. Anda harus menggunakannya --set-propsebagai gantinya. Juga, xinput --enable [device]dan xinput --disable [device]dapat digunakan untuk mengaktifkan dan menonaktifkan perangkat masing-masing.

Berikut ini adalah skrip shell yang saya gunakan untuk mengaktifkan, menonaktifkan, dan mengganti touchpad laptop saya:

#!/bin/bash
# Enables, disables, or toggles device

device='AlpsPS/2 ALPS GlidePoint'
if [[ $1 == -e ]] ; then
    # Enable
    #xinput --set-prop "$device" "Device Enabled" 1
    xinput --enable "$device"
elif [[ $1 == -d ]] ; then
    # Disable
    #xinput --set-prop "$device" "Device Enabled" 0
    xinput --disable "$device"
elif [[ $1 == -t ]] ; then
    # Toggle
    if [[ $(xinput list-props "$device" |
       grep "Device Enabled") == *:*1 ]] ; then
           #xinput --set-prop "$device" "Device Enabled" 0
           xinput --disable "$device"
    else
        #xinput --set-prop "$device" "Device Enabled" 1
        xinput --enable "$device"
    fi
else
    echo "usage: $0 [-edt]"
fi

sumber
Lihat komentar saya untuk posting Philomath. Saya punya masalah yang sama untuk xinput --disable 9.
Emanuel Berg
6

Pertanyaan yang dijawab menggunakan xinput adalah yang benar, tetapi di sini adalah yang cepat jika semua yang Anda cari adalah kunci jenis screensaver sederhana. Saya menulis ini kembali di tahun 90-an, dan semua yang dilakukannya adalah makan keyboard dan mouse peristiwa X server, sampai Anda mengetik kata sandi. Tidak ada umpan balik sama sekali selain keluar saat Anda mengetiknya dengan benar.

http://ishiboo.com/~danny/Projects/xl/

Saya menggunakannya sebagai kunci layar, persis bagaimana Anda ingin menggunakannya.

Danny Dulai
sumber
Saya memilih ini karena ini adalah solusi yang saya inginkan, tetapi tidak berfungsi untuk saya di Linux dengan kata sandi bayangan. Sebuah proses harus di-root untuk mengakses / etc / shadow dan fungsi terkait, tetapi saya ingin menjalankan xl sebagai pengguna non-root. Kasus penggunaan saya: ketika kami menonton acara di komputer, bayi perempuan saya suka bash di keyboard! xscreensaver tidak membantu untuk ini
Sam Watkins
Jawaban Anda adalah contoh yang bagus dari "tanpa pemrograman" atau pemrograman unix "lakukan satu hal dan lakukan dengan baik" ... kecuali bahwa itu tidak bekerja untuk saya (dengan kata sandi bayangan!) Untuk kasus penggunaan saya, saya senang sulit -kode kata sandi, jadi tidak apa-apa. Sekarang ajari saya cara menonaktifkan tombol power, itu tombol favorit bayi saya!
Sam Watkins
kenapa kamu tidak mau root? mengapa tidak suid biner xl?
Danny Dulai
BTW, Anda dapat menentukan kata sandi pada commandline atau melalui variabel lingkungan sekarang.
Danny Dulai
Apakah mungkin untuk makan acara input X dengan set alat X standar dan skrip shell?
Alexander Shcheblikin
2

Jawaban Anda mungkin yang terbaik untuk use case kedua Anda (melakukan sesuatu dari jarak jauh), tetapi mungkin tidak untuk yang pertama (berada jauh dari keyboard). Bagaimana Anda menjalankan xinput lagi untuk memulihkan akses ketika Anda kembali?

Solusi standar untuk mengunci sistem saat jauh dari itu adalah XScreenSaver , yang diinstal secara default di sebagian besar distro. Jika dikonfigurasi untuk mengunci keyboard, itu akan meminta kata sandi Anda sebelum membukanya.

cjm
sumber
Saya telah memperbarui.
Philomath
2

Setidaknya pada sistem berbasis Debian seperti Ubuntu ada utilitas yang disebut xtrlock (1)tersedia melalui repositori paket.

Utilitas ini mengunci keyboard dan mouse hingga kata sandi dimasukkan sementara meninggalkan jendela yang terlihat. Saya merasa berguna untuk komputer yang menjalankan tampilan informasi dan sejenisnya.

Jukka Matilainen
sumber
Ini sepertinya pilihan paling sederhana dan ringan, dan sudah ada sejak pertengahan 90-an juga. Satu masalah adalah saya pikir itu tidak mungkin untuk menyembunyikan gambar kursor yang terkunci, yang membuat ini tidak dapat digunakan untuk signage, sayangnya.
aexl
1

Tergantung pada perangkat keras Anda, Anda dapat menghapus modul, mengendalikan perangkat keras Anda. Saya memiliki skrip seperti touchpadtoggle,, untuk mengaktifkan dan menonaktifkan touchpad saya.

lsmod | grep -q psmouse && rmmod psmouse || modprobe psmouse

Tetapi keyboard tampaknya tidak memiliki modul yang terkait, dan modul psmouse hanya akan berfungsi sesekali.

Pengguna tidak diketahui
sumber
1

Jika Anda menggunakan Desktop Environment atau manajer login, (GNOME, KDE, XFCE, LXDE) hampir semuanya memiliki fungsi layar kunci di mana Anda harus mengetikkan kata sandi untuk kembali ke program Anda.

Namun karena itu sangat sederhana, saya rasa masalah Anda lebih kompleks / berbeda.

Loosecannon
sumber
Saya telah memperbarui.
Philomath
1

Saya menulis ini (dalam .zshrc, tetapi harus bekerja .bashrcjuga) untuk melakukan ini, dengan bantuan jawaban di atas. Untuk melakukan yang sesuai dengan keyboard, ubah parameter dalam grep Mouse.

setmouse () {
 xinput \
  $1 \
  `xinput | grep Mouse | tr -d " " | tr "\t" " " | cut -d" " -f2 | cut -d"=" -f2`
}
offmouse () { setmouse disable }
onmouse  () { setmouse enable  }
Emanuel Berg
sumber
Lihat jawaban saya untuk pertanyaan serupa pada SO - itu melakukan hal yang sama, tetapi dapat dipanggil dari tty, dan, itu juga (menggunakan solusi) menyembunyikan pointer.
Emanuel Berg