Cyr*_*lle 5 ubuntu usb power-management bluetooth linux-mint
几分钟不活动(1000 万?)后,我的键盘进入睡眠状态。我必须按一个键,然后等待 5 秒才能再次使用它......
首先,一些技术细节:
我使用 bluetoothctl 配对键盘。这是我发现输入密码的唯一方法,因为 blueman-mananger 不要求输入密码。
我尝试过的:
命令:
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="[a-z ]*/& usbcore.autosuspend=-1/' /etc/default/grub
sudo update-grub2
reboot
cat /sys/module/usbcore/parameters/autosuspend
-1
Run Code Online (Sandbox Code Playgroud)
配置+重启:
AutoEnable=true
FastConnectable=true
Run Code Online (Sandbox Code Playgroud)
还有其他想法吗?蓝牙选项?USB 选项?键盘选项?也许某种不干扰脚本+ cron 来保持它的活力?
(我知道“Mint 不是 Linux”,但我希望你们比 askubuntu Stack Exchange 社区更加开放:-))
编辑:我连接了蓝牙耳机。看起来只有键盘在睡觉。耳机保持唤醒状态。当键盘处于睡眠状态时,我无法从blueman管理器(右键单击+连接)手动连接键盘,但我可以连接耳机。
小智 2
我有相同的键盘,相同的操作系统和相同的问题。对此有很多抱怨,但几乎没有解决方案。
我做了很多研究,我认为最好的方法是将蓝牙适配器设置为HID 模式,将其专用于键盘。您基本上可以将与键盘的配对“上传”到适配器上。然后,适配器将自行管理与键盘的连接,将其自身显示为系统的常规 USB 键盘。您的 TP-Link 适配器似乎有一个应该可以工作的 CSR 8150 芯片组。缺点:该适配器要么处于HID 模式,要么处于常规 HCI 模式,在其中充当通用蓝牙适配器。
您可以在这里看到有人为另一个键盘做了类似的事情的存储库。他们的设置要求您设置虚拟机;我认为这可以更容易完成:
运行bccmd psget 0x3cd
(也许使用 sudo)并查看是否出现错误。如果没有,您的蓝牙适配器应该兼容。我的适配器出现故障(尽管据说有 CSR8150 芯片组)。没有破坏任何东西,但也没有修复它。
激活键盘连接后,运行hcitool con
以获取键盘的 MAC 地址。接下来,使用 获取蓝牙适配器的 MAC 地址hcitool dev
。
将以下脚本(取自链接的存储库并进行修改)保存为文本文件,并将两个 MAC 地址放在第一行中:
#!/bin/sh
MAC=your_adapter_MAC
DEV=hci0
CTRL=your_keyboard_MAC
function die() {
echo "FATAL: $@" 1>&2
exit 1
}
function readKeys() {
export Key= EDiv= Rand=
export t= $(cat "/var/lib/bluetooth/$CTRL/$MAC/info" | sed -n -e '/^\[LongTermKey/,/^\[/p' | grep -E '^(Key|EDiv|Rand)=[A-F0-9]+$')
if [ -z "$Key" ] || [ -z "$EDiv" ] || [ -z "$Rand" ]; then
return 1
fi
return 0
}
function toHex() { echo "obase=16; $1" | bc; }
function revbytes(){ local b=""; for ((i=2;i<=${#1};i+=2)); do b=$b${1: -i:2}; done; echo $b; }
function rev16(){ local b=""; for ((i=0;i<${#1};i+=4)); do b=$b${1: i+2:2}${1: i:2}; done; echo $b; }
function pad() { local b=000000000000000000000000000000000000000000000000000000$1; echo ${b: -$2*2:$2*2}; }
function makeToken() { echo $(echo $MAC|tr -d : )1482$(rev16 $(pad $(toHex $EDiv) 2))$(revbytes $(pad $(toHex $Rand) 8))$(rev16 $(pad $Key 16)); }
function formatToken() { local b=""; for ((i=0;i<${#1};i+=4)); do b="$b${1: i:4} "; done; echo $b | tr A-Z a-z; }
readKeys || die "Could not extract pairing keys"
token=$(formatToken $(makeToken))
[ ${#token} -eq 84 ] || die "Token $token has incorrect length"
echo "Writing $token to /dev/$DEV"
bccmd psload -s 0 /dev/stdin <<-EOF
// PSKEY_USR42
&02b4 = $token
// PSKEY_INITIAL_BOOTMODE
&03cd = 0002
&04b0 = 03c0 03cc 22c0
&04b1 = 01f9 0042
&04b2 = 02bf 03c0 03cc 02bd 000d 000e 215f
&04b8 = 0000
&04b9 = 0000
&04ba = 0001
&04f8 = 0000
&04f9 = 0001
&0538 = 100b
&0539 = 0001
&053a = 0001
&053b = 0000 0000 0000
&053c = 0002
&053d = 0000
&053e = 0002 0001 000a 0008 0010 0008 0020 0008 0040 0004 0080 0002 0140 0001 0200 0002
EOF
if [ $? -ne 0 ]; then
die 'write failed :-('
fi
bccmd psread | grep '&02b4'
echo "Make sure the above output is $token"
Run Code Online (Sandbox Code Playgroud)
以 root 身份运行该脚本,您的适配器应设置为 HID 模式,不仅可以修复重新连接问题,还可以在 BIOS 中启动时处理 HDD 加密密码等问题。