如何在Linux下禁用键盘,触摸板,鼠标等输入设备

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Linux下禁用键盘,触摸板,鼠标等输入设备相关的知识,希望对你有一定的参考价值。

禁用后依旧可以远程管理
xinput 来禁用/启用输入设备。我经常用 synclient 来关掉我的触摸板, 或者用 xinput 来关闭我的笔记本键盘。
第一步我们需要先拿到设备的名字或者ID:
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ USB Optical Mouse id=8 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=7 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Power Button id=10 [slave keyboard (3)]
↳ Video Bus id=11 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=6 [slave keyboard (3)]

在这里触摸板的名字是 'SynPS/2 Synaptics TouchPad' ID是 7;
键盘的名字是 'AT Translated Set 2 keyboard' ID是 6.
下一步我们要知道设备都有什么属性:
$ xinput list-props 'AT Translated Set 2 keyboard'
Device 'AT Translated Set 2 keyboard':
Device Enabled (127): 1

键盘只有一个属性 'Device Enabled' 他的值是 1,意思就是说键盘是打开状态的。
我们来尝试关掉它:
sleep 0.1 ; xinput set-prop 'AT Translated Set 2 keyboard' 'Device Enabled' 0 ; sleep 5 ; xinput set-prop 'AT Translated Set 2 keyboard' 'Device Enabled' 1

开头 sleep 0.1 的目的是要留出时间让你执行当前命令时所敲的回车的按键(keypress)事件能够完成, 我猜测当你按下回车时命令就会执行并把键盘禁用,但是按键弹起(keyup)还没有被发送,所以X会以为你一直按这回车键。
另一个更简单的用法是用ID来进行操作,这样你就不需要输入一大长串的名字了:
sleep 0.1 ; xinput set-prop 8 127 0 ; sleep 5 ; xinput set-prop 8 127 1

键盘的ID是8, 属性 'Device Enabled' 的ID是127。 当你用 list-props 列出设备属性时, 在属性名后面的数字就是属性的ID。 像 'Device Enabled' 的ID总是 127,但是设备的ID就不一样,它跟设备的连接时间有关,一般越先连接的设备ID越小,之后会越来越大。
PS:设置设备属性不需要root权限。
参考技术A 都禁用了,你想怎么控制你机器呢

javascript 每当用户输入类型更改(鼠标或触摸)时运行回调。用于根据输入设备启用/禁用代码。钍

/*
Use two event listeners. 
Assume mouse input initially and bind a touchstart event listener to the document. 
On touchstart, add a mousemove event listener to listen for two consecutive mousemove events firing within 20ms, using performance.now(). 
Run the callback with the input type as an argument in either of these situations.
*/
const onUserInputChange = callback => {
  let type = 'mouse',
    lastTime = 0;
  const mousemoveHandler = () => {
    const now = performance.now();
    if (now - lastTime < 20)
      (type = 'mouse'), callback(type), document.removeEventListener('mousemove', mousemoveHandler);
    lastTime = now;
  };
  document.addEventListener('touchstart', () => {
    if (type === 'touch') return;
    (type = 'touch'), callback(type), document.addEventListener('mousemove', mousemoveHandler);
  });
};

/* example:
onUserInputChange(type => {
  console.log('The user is now using', type, 'as an input method.');
});
*/

以上是关于如何在Linux下禁用键盘,触摸板,鼠标等输入设备的主要内容,如果未能解决你的问题,请参考以下文章

我的是宏基笔记本电脑, 触摸板和鼠标经常失灵 怎么回事

笔记本电脑触控板和键盘都用不了怎么办

同步手绘板——项目开发计划

正点原子I.MX6U-MINI应用篇7输入设备(鼠标键盘触摸屏按钮)的应用编程和tslib库

ubuntu鼠标和触摸板的禁用

Win32 API 函数以编程方式启用/禁用设备