在小米笔记本中安装了Ubuntu 18.04系统后发现飞行模式(和F9同键),触摸板启停(Fn+Space),截图(和F7同键)三个特殊键不能使用,经过摸索,得到了正确的处理方法,使其能够使用上特殊键。不过要声明的是,目前还没有找到获取截图键keycode的方式。
查询特殊建keycode 查阅资料后发现xev、showkey、xbindkeys等命令可以查看每个键的keycode,acpi_listen可以查询预置的触发事件。 通过以下命令测试后: xbindkeys -k # 分别查询不能用的三个特殊建,只识别了“飞行模式”键,keycode为255,其他两个键不能识别 xev # 分别查询不能用的三个特殊建,三个键都不能识别 showkey -k # 分别查询不能用的三个特殊建,三个键都不能识别 acpi_listen # 分别查询不能用的三个特殊建,三个键都不能识别 dmesg命令可以看到硬件的检测或者断开连接的信息。所以继续测试没有查询到keycode的“触摸板启停”,“截图”键。按下“触摸板启停”键后,有如下信息提示,按下“截图”键后没有任何提示。 May 21 11:18:59 localhost kernel: atkbd.c: Unknown key pressed (translated set 2, code 0xf1 on isa0060/serio0). May 21 11:18:59 localhost kernel: atkbd.c: Use 'setkeycodes e071 <keycode>' to make it known. 按照提示信息,使用setkeycodes重新设置键值,code 0xf1转换成十进制为241,命令如下: sudo setkeycodes e071 241 重新设置键值后,通过xbindkeys -k查询键值为249。 注意:重新设置键值后,重启电脑会失效,所以需要将sudo setkeycodes e071 241加入开机启动。方法请参考文最后的[附]Ubuntu 18.04 rc.local systemd设置。
编写绑定脚本 至此,我们已经获取了“飞行模式(和F9同键)”,“触摸板启停(Fn+Space)”这两个键的键值,分别为255和249。然后编写绑定脚本,保存在/opt目录下,并赋予执行权限。 1、Synaptics.sh如下: # 启停触摸板: # ---------------- #!/bin/bash s=$(xinput|grep Synaptics) # 获取触摸板信息 id=$(echo ${s:50:2}) # 获取触摸板id output=$(xinput list-props $id) # 获取触摸板详细信息 if [[ "$output" =~ Device.Enabled.(142):.1 ]] # 判断Device Enabled (142)为1 then xinput disable $id # 禁用触摸板 else xinput enable $id # 启用触摸板 fi 2、airplane.py如下: # 飞行模式: # ---------------- # coding=utf-8 import os airplane = os.popen('rfkill list').read() # 获取蓝牙、无线软硬开关信息 airplane = airplane.replace(' ','').split(' ') # 将信息存储在列表中 if airplane[1] == 'Soft blocked: no' or airplane[4] == 'Soft blocked: no': # 判断蓝牙或无线是否软关闭 os.popen('rfkill block all') # 飞行模式打开 else: os.popen('rfkill unblock all') # 关闭飞行模式
配置绑定文件 新建绑定配置文件,如果没有安装xbindkeys,请执行sudo apt install xbindkeys xbindkeys --defaults > $HOME/.xbindkeysrc 配置文件.xbindkeysrc中添加如下内容: "python3 /opt/airplane.py" m:0x0 + c:255 "/opt/Synaptics.sh" m:0x0 + c:249 然后重启电脑,飞行模式(和F9同键),触摸板启停(Fn+Space)这两个键已经可以正常使用了。
附:Ubuntu 18.04 rc.local systemd设置 ubuntu18.04不再使用initd管理系统,改用systemd(Systemd入门教程)。 然而systemd很难用,改变太大,跟之前的完全不同。 使用systemd设置开机启动 为了像以前一样,在/etc/rc.local中设置开机启动程序,需要以下几步: 1、systemd默认读取/etc/systemd/system下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。一般系统安装完/lib/systemd/system/下会有rc-local.service文件,即我们需要的配置文件。 链接过来: ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service cd /etc/systemd/system/ cat rc-local.service rc-local.service内容如下: # SPDX-License-Identifier: LGPL-2.1+ # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # This unit gets pulled automatically into multi-user.target by # systemd-rc-local-generator if /etc/rc.local is executable. [Unit] Description=/etc/rc.local Compatibility Documentation=man:systemd-rc-local-generator(8) ConditionFileIsExecutable=/etc/rc.local After=network.target [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 RemainAfterExit=yes GuessMainPID=no [Install] WantedBy=multi-user.target Alias=rc-local.service 1) [Unit] 区块:启动顺序与依赖关系。 2) [Service] 区块:启动行为,如何启动,启动类型。 3) [Install] 区块,定义如何安装这个配置文件,即怎样做到开机启动。 2、创建/etc/rc.local文件: touch /etc/rc.local 3、赋可执行权限: chmod 755 /etc/rc.local 4、编辑rc.local,添加需要开机启动的任务: #!/bin/bash echo "test rc " > /var/test.log 5、执行reboot重启系统,然后查看test.log。
相关主题 |