Unix'te Klavye ve Fare girişini devre dışı bırak (X altında)


28

Kişi programlı olarak Klavye ve Fareyi geçici olarak nasıl "dondurabiliyor" ki kimse sisteme karışmasın?

Bunun yararlı olduğu birkaç seçenek var. Mesela, bir dizüstü bilgisayarım var ve birileri şifresini bilse ya da tahmin edebiliyor olsa bile (karı ya da çocuklar gibi) ve hırsızların iştahını azalttığı halde (eş gibi göründüğü gibi) kimsenin kullanmadığından emin olmak istiyorum. -functioning). veya uzaktan bir şey yapıyorum bu yüzden bilgisayardaki kullanıcının rahatsız etmediğinden emin olmak istiyorum.


Yanıtlar:


24

GUI'nizin X temelli olduğunu varsayalım (neredeyse tüm UNIX GUI'leri gibi) kullanın xinput.

İlk olarak, cihazlarınızı listeleyin:

$ 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)]

Farenizle ilgili ayrıntıları listeleyin (örneğimizde id = 6):

$ 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

Şimdi devre dışı bırak:

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

Bunu etkinleştirmek için:

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

Aynı şey klavye için de geçerli, int-prop numarasını sadece uygun bir id ile değiştirin.
Cygwin üzerinde test edildi ve çalıştı.

Elbette, önceden cihazlarınızı nasıl etkinleştireceğinizi planlamanız gerekir. cron'a programlamak, uzaktan yeniden etkinleştirmek veya sadece bir tanesini ilk önce devre dışı bırakmak gibi.


Burada başka hiçbir cevap soruyu cevaplamaz.
Philomath

Benim durumumda, fareyi devre dışı bırakma komutu şöyle görünür: xinput set-int-prop 9 "Device Enabled" 8 0- sadece, 1) Fare imlecini de gizlemek isterim ve 2) X'ten bir tty'ye (Linux konsolu / VT'ler) gidersem ve sonra X'e geri dönün, bu sıfırlanır (bunu xinput list-props 9onaylar).
Emanuel Berg

Bir "ana işaretçi" aygıtını devre dışı bırakabilir miyim?
ed22,

14

xinput --set-int-propkullanımdan kaldırıldı. Bunun --set-propyerine kullanmalısın . Ayrıca, xinput --enable [device]ve xinput --disable [device]etkinleştirme ve sırasıyla devre dışı cihazlar için kullanılabilir.

Dizüstü bilgisayarımın dokunmatik yüzeyini etkinleştirmek, devre dışı bırakmak ve değiştirmek için kullandığım bir kabuk betiği:

#!/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

Philomath'ın gönderisine yorumumu inceleyin. Bende de aynı problem var xinput --disable 9.
Emanuel Berg

6

Xinput kullanarak cevaplanan soru doğru olanıdır, ancak aradığınız tek şey basit bir ekran koruyucu tipi kilit ise işte hızlı bir soru. Bunu 90'larda yazdım ve tek yapmanız gereken şifreyi yazana kadar X sunucusunun klavye ve fare olaylarını yemektir. Doğru yazdığınızda çıkma dışında hiçbir geri bildirim yok.

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

Tam olarak nasıl kullanmak istediğinizi ekran kilidi olarak kullanıyorum.


İstediğim türden bir çözüm olduğu için oy kullandım, ancak Linux'ta gölge şifrelerle çalışmaz. Bir işlem / etc / shadow ve ilişkili işlevlere erişmek için root olmalıdır, ancak xl'yi root olmayan bir kullanıcı olarak çalıştırmak istiyorum. Kullanım durumum: bilgisayarda gösterileri izlediğimizde bebek kızım klavyede baskı yapmayı seviyor! xscreensaver bunun için yararlı değil
Sam Watkins

Cevabınız, "emişsiz" veya unix programlamanın "bir şeyi yapın ve iyi yapın" için harika bir örneği ... benim için işe yaramazsa hariç (gölge şifreleriyle!) Kullanım davam için çok mutluyum -Bir şifre yaz, sorun değil. Şimdi bana güç düğmesini nasıl devre dışı bırakacağımı öğret, bu benim bebeğimin favori düğmesi!
Sam Watkins,

neden kök istemiyorsun Neden xl binary intihar değil?
Danny Dulai

BTW, şifreyi komut satırında veya şimdi bir ortam değişkeni üzerinden belirleyebilirsiniz.
Danny Dulai

X girişi olaylarını standart bir X araç seti ve bir kabuk betiği ile yemek mümkün müdür?
Alexander Shcheblikin

2

Cevabınız muhtemelen ikinci kullanım durumunuz (uzaktan bir şey yapmak) için en iyisidir, ancak muhtemelen ilk kullanımınız için (klavyeden uzak olmak için). Döndüğünüzde erişimi yeniden sağlamak için xinput'u nasıl tekrar çalıştırırsınız?

Sistemi uzaktayken kilitlemenin standart çözümü , çoğu dağıtımda varsayılan olarak yüklenen XScreenSaver'dir . Klavyeyi kilitlemek için yapılandırılmışsa, kilidi açmadan önce şifrenizi soracaktır.


Güncelledim.
Philomath

2

En azından Ubuntu gibi Debian tabanlı sistemlerde xtrlock (1)paket depoları aracılığıyla erişilebilen bir yardımcı program var .

Bu yardımcı program, klavyeyi ve fareyi, pencereleri görünür halde bırakırken parola girilene kadar kilitler. Bilgi ekranları ve benzerlerini çalıştıran bilgisayarlar için yararlı buluyorum.


Bu en basit ve en hafif seçenek gibi gözüküyor ve 90'ların ortasından beri de var. Bir sorun, maalesef bunu tabela için kullanılamaz yapan kilitli imleç görüntüsünü gizlemenin mümkün olmadığını düşünüyorum.
17'de

1

Donanımınıza bağlı olarak, donanımınızı kontrol ederek modülleri çıkarabilirsiniz. touchpadtoggleDokunmatik yüzeyimi etkinleştirmek ve devre dışı bırakmak için böyle bir komut dosyası var .

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

Ancak klavyeyle ilişkili bir modül görünmüyor ve psmouse modülü yalnızca ara sıra çalışacak.


1

Bir Masaüstü Ortamı veya oturum açma yöneticisi kullanıyorsanız (GNOME, KDE, XFCE, LXDE) hemen hemen hepsinde, programlarınıza geri dönmek için şifrenizi girmeniz gereken bir kilit ekranı işlevi vardır.

Ancak bu gerçekten basit olduğu için probleminizin daha karmaşık / farklı olduğunu hissediyorum.


Güncelledim.
Philomath

1

Bunun için yukarıdaki cevapların yardımıyla bunu yazdım ( aynı zamanda .zshrcçalışmalıyım .bashrc). Klavyeyle ilgili olanı yapmak için, içindeki parametreyi değiştirin grep Mouse.

setmouse () {
 xinput \
  $1 \
  `xinput | grep Mouse | tr -d " " | tr "\t" " " | cut -d" " -f2 | cut -d"=" -f2`
}
offmouse () { setmouse disable }
onmouse  () { setmouse enable  }

Benim göz atın cevap aynı zamanda (bir çözüm kullanılarak), aynı, ama uçbirimlerden çağrılabilir ve - SO benzer bir soruya gizler işaretçi.
Emanuel Berg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.