ปิดใช้งานการป้อนข้อมูลด้วยแป้นพิมพ์และเมาส์บน unix (ต่ำกว่า X)


28

หนึ่งโปรแกรมสามารถ "หยุด" Keyboard & Mouse ชั่วคราวได้อย่างไรโดยที่ไม่มีใครสามารถยุ่งกับระบบได้?

มีความเป็นไปได้หลายอย่างที่เป็นประโยชน์ ตัวอย่างเช่นฉันมีแล็ปท็อปและฉันต้องการให้แน่ใจว่าไม่มีใครใช้มันในขณะที่ฉันออกแม้ว่าใครบางคนจะรู้รหัสผ่านหรือสามารถเดาได้ (เช่นภรรยาหรือลูก ๆ ) รวมถึงความอยากอาหารของจอมโจร -functioning) หรือฉันกำลังทำบางสิ่งจากระยะไกลดังนั้นฉันต้องการตรวจสอบให้แน่ใจว่าผู้ใช้ที่คอมพิวเตอร์ไม่รบกวน


คำตอบ:


24

สมมติว่าคุณ GUI เป็น X-based (เป็นเกือบทุก GUIs UNIX มี) xinputการใช้งาน

ก่อนอื่นแสดงรายการอุปกรณ์ของคุณ:

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

รายการรายละเอียดสำหรับเมาส์ของคุณ (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

ตอนนี้ปิดการใช้งาน:

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

วิธีเปิดใช้งานทำได้:

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

เช่นเดียวกันกับคีย์บอร์ดเพียงแค่เปลี่ยนหมายเลข int-prop ด้วย id ที่เหมาะสม
ผ่านการทดสอบและทำงานกับ cygwin

แน่นอนคุณต้องวางแผนล่วงหน้าก่อนว่าจะเปิดใช้งานอุปกรณ์ของคุณอย่างไร เช่นกำหนดเวลาไว้ที่ cron เปิดใช้งานอีกครั้งจากระยะไกลหรือปิดใช้งานเพียงครั้งเดียวในตำแหน่งแรก


ไม่มีคำตอบอื่นที่นี่ตอบคำถาม
Philomath

ในกรณีของฉันคำสั่งเพื่อปิดการใช้งานเมาส์มีลักษณะเช่นนี้: xinput set-int-prop 9 "Device Enabled" 8 0- เท่านั้น 1) ฉันต้องการซ่อนตัวชี้เมาส์เช่นกันและ 2) ถ้าฉันไปจาก X เป็น tty (Linux console / VTs) และ จากนั้นกลับสู่ X จะถูกรีเซ็ต ( xinput list-props 9ยืนยันสิ่งนี้)
Emanuel Berg

ฉันสามารถปิดการใช้งานอุปกรณ์ "ตัวชี้หลัก" ได้หรือไม่
ed22

14

xinput --set-int-propเลิกใช้แล้ว คุณควรใช้--set-propแทน นอกจากนี้xinput --enable [device]และxinput --disable [device]สามารถนำมาใช้เพื่อเปิดใช้งานและปิดการใช้งานอุปกรณ์ตามลำดับ

นี่คือเชลล์สคริปต์ที่ฉันใช้เพื่อเปิดใช้งานปิดใช้งานและสลับทัชแพดของแล็ปท็อป:

#!/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 xinput --disable 9ผมเคยมีปัญหาเช่นเดียวกันสำหรับ
Emanuel Berg

6

คำถามที่ตอบแล้วโดยใช้ xinput เป็นคำถามที่ถูกต้อง แต่นี่เป็นคำถามที่รวดเร็วหากสิ่งที่คุณต้องการคือล็อคหน้าจอแบบง่าย ฉันเขียนสิ่งนี้ย้อนกลับไปในยุค 90 และสิ่งที่มันทำคือกินเหตุการณ์แป้นพิมพ์และเมาส์ของเซิร์ฟเวอร์ X จนกว่าคุณจะพิมพ์รหัสผ่าน ไม่มีข้อเสนอแนะใด ๆ นอกจากออกเมื่อคุณพิมพ์อย่างถูกต้อง

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

ฉันใช้มันเป็นล็อคหน้าจอตรงตามที่คุณต้องการใช้


ฉันลงคะแนนให้กับสิ่งนี้เนื่องจากเป็นโซลูชันที่ฉันต้องการ แต่มันใช้ไม่ได้กับฉันบน Linux ที่ใช้รหัสผ่านเงา กระบวนการต้องเป็นรูทเพื่อเข้าถึง / etc / shadow และฟังก์ชั่นที่เกี่ยวข้อง แต่ฉันต้องการรัน xl ในฐานะผู้ใช้ที่ไม่ใช่รูท กรณีการใช้งานของฉัน: เมื่อเราดูรายการบนคอมพิวเตอร์ลูกสาวของฉันชอบทุบตีแป้นพิมพ์! xscreensaver ไม่มีประโยชน์สำหรับสิ่งนี้
Sam Watkins

คำตอบของคุณคือตัวอย่างที่ยอดเยี่ยมของการเขียนโปรแกรม "suckless" หรือ unix "ทำสิ่งหนึ่งและทำมันได้ดี" ... ยกเว้นว่ามันไม่ได้ผลสำหรับฉัน (ด้วยรหัสผ่านเงา!) สำหรับกรณีการใช้งานของฉัน - รหัสผ่านรหัสผ่านก็ไม่เป็นไร ตอนนี้สอนวิธีปิดใช้งานปุ่มเปิดปิดนั่นคือปุ่มโปรดของลูกน้อย!
Sam Watkins

ทำไมคุณไม่ต้องการรูท ทำไมไม่ลอง xl binary
Danny Dulai

BTW คุณสามารถระบุรหัสผ่านบน commandline หรือผ่านตัวแปรสภาพแวดล้อมในขณะนี้
Danny Dulai

เป็นไปได้ไหมที่จะกินเหตุการณ์อินพุต X ด้วยชุดเครื่องมือ X มาตรฐานและเชลล์สคริปต์
Alexander Shcheblikin

2

คำตอบของคุณน่าจะดีที่สุดสำหรับเคสที่คุณใช้ครั้งที่สอง (ทำบางสิ่งจากระยะไกล) แต่อาจไม่ใช่สำหรับคุณคนแรก คุณจะเรียกใช้ xinput อีกครั้งเพื่อคืนค่าการเข้าถึงเมื่อคุณกลับมาได้อย่างไร

โซลูชันมาตรฐานเพื่อล็อคระบบในขณะที่อยู่ห่างจากมันคือXScreenSaverซึ่งติดตั้งโดยค่าเริ่มต้นใน distros ส่วนใหญ่ หากกำหนดค่าให้ล็อคแป้นพิมพ์จะมีการถามรหัสผ่านของคุณก่อนปลดล็อค


ฉันได้อัพเดทแล้ว
Philomath

2

อย่างน้อยในระบบที่ใช้เดเบียนเช่นอูบุนตูมียูทิลิตี้ที่เรียกว่าxtrlock (1)มีให้ใช้งานผ่านที่เก็บแพคเกจ

ยูทิลิตี้นี้ล็อคแป้นพิมพ์และเมาส์จนกว่าจะมีการป้อนรหัสผ่านในขณะที่มองไม่เห็นหน้าต่าง ฉันคิดว่ามันมีประโยชน์สำหรับคอมพิวเตอร์ที่รันการแสดงข้อมูลและไม่ชอบ


ดูเหมือนว่าจะเป็นตัวเลือกที่เรียบง่ายและมีน้ำหนักเบาที่สุดและมันก็มีมาตั้งแต่กลางยุค 90 ด้วยเช่นกัน ปัญหาหนึ่งคือฉันไม่คิดว่าเป็นไปได้ที่จะซ่อนภาพเคอร์เซอร์ที่ล็อคซึ่งทำให้ไม่สามารถใช้งานกับป้ายได้
aexl

1

คุณสามารถลบโมดูลควบคุมฮาร์ดแวร์ของคุณได้ทั้งนี้ขึ้นอยู่กับฮาร์ดแวร์ของคุณ ฉันมีสคริปต์touchpadtoggleเพื่อเปิดใช้งานและปิดการใช้งานทัชแพดของฉัน

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

แต่ดูเหมือนว่าแป้นพิมพ์จะไม่มีโมดูลที่เกี่ยวข้องและโมดูล psmouse จะทำงานได้เป็นครั้งคราวเท่านั้น


1

หากคุณใช้ Desktop Environment หรือตัวจัดการการเข้าสู่ระบบ (GNOME, KDE, XFCE, LXDE) เกือบทั้งหมดมีฟังก์ชันล็อคหน้าจอที่คุณต้องพิมพ์รหัสผ่านเพื่อกลับไปที่โปรแกรมของคุณ

อย่างไรก็ตามเนื่องจากมันง่ายจริงๆฉันรู้สึกว่าปัญหาของคุณซับซ้อนกว่า / แตกต่างกัน


ฉันได้อัพเดทแล้ว
Philomath

1

ฉันเขียนสิ่งนี้ (ใน.zshrcแต่ควรทำงาน.bashrcด้วย) เพื่อทำสิ่งนี้ด้วยความช่วยเหลือของคำตอบข้างต้น grep Mouseจะทำอย่างไรที่สอดคล้องกับแป้นพิมพ์เปลี่ยนพารามิเตอร์ใน

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

ตรวจสอบคำตอบของฉันสำหรับคำถามที่คล้ายกันใน SO - มันทำเหมือนกัน แต่สามารถเรียกใช้จาก tty และ (ด้วยการใช้วิธีแก้ปัญหา) ซ่อนตัวชี้
Emanuel Berg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.