Bluetoothキーボードの省電力モードの防止

Bluetoothキーボードの省電力モードの防止

数分(千万?)の間にアクティビティがないと、キーボードはスリープモードに入ります。キーを押してからもう一度使用するには、5秒待つ必要があります。

まず、いくつかの技術的な詳細は次のとおりです。

  • Linux Mint 20 ulyana – Cinnamon (Ubuntu 20.04)
  • TP-LinkUB400
  • Bluetooth USBアダプタMicrosoft Surface人間工学に基づいたキーボード

ここに画像の説明を入力してください。 ここに画像の説明を入力してください。

bluetoothctlを使用してキーボードをペアリングします。 blueman-manangerはパスワードを要求しないので、これがパスワードを入力する唯一の方法です。

私が試したこと:

  • 1 - BIOSでUSB電源管理オプションを確認します(マザーボード:Asus H87-PLUS C2)。私は何も見つかりませんでした
  • 2 - グラップ設定。変更なし。

注文する:

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
  • 3 - パラメータで電源管理を見つけます。何も見つかりませんでした。 ここに画像の説明を入力してください。 ここに画像の説明を入力してください。

  • 4 - /etc/bluetooth/main.cfg を編集します。まだ何もありません。

設定+再起動:

AutoEnable=true
FastConnectable=true

別のアイデアがありますか? Bluetoothオプション? USBオプション?キーボードオプション?おそらく干渉しないスクリプト+ cronを使用して維持することができますか?

(私は「MintがLinuxではない」ことを知っていますが、あなたはaskubuntu Stack Exchangeコミュニティよりもオープンであることを願っています:-))

編集:Bluetoothヘッドセットを接続しました。キーボードだけがスリープ状態のようです。ヘッドセットはアクティブのままです。キーボードがスリープモードのとき、Blueman Manager(右クリック+接続)でキーボードを手動で接続できないため、ヘッドセットを接続できます。

ベストアンサー1

同じキーボード、同じOS、同じ問題があります。これに対する苦情はたくさんありますが、解決策はほとんどありません。

多くの調査をしましたが、最良の方法はBluetoothアダプタをキーボード専用に設定することです。HIDモード。デフォルトでは、キーボードとのペアリングをアダプタに「アップロード」します。アダプタは、キーボードへの自己接続を管理し、システムの通常のUSBキーボードとして表示されます。あなたのTP-Linkアダプタには、正しく動作するCSR 8150チップセットがあるようです。欠点:このアダプター誰でもHIDモードまたは通常のHCIモードでは、ユニバーサルBluetoothアダプタとして機能します。

あなたは見ることができます買戻契約です誰かが他のキーボードと同様のことをしました。これを設定するには、仮想マシンを設定する必要があります。この作業が簡単にできると思います。

互換性テスト

実行してbccmd psget 0x3cd(おそらくsudoを使用して)エラーが発生していることを確認してください。そうでない場合は、Bluetoothアダプタと互換性がなければなりません。私のアダプタにエラーが発生しました(CSR8150チップセットがあると推定されています)。何も壊れませんでしたが、修正されませんでした。

キーボードとアダプタのMAC抽出

キーボード接続を有効にした後に実行して、hcitool conキーボードのMACアドレスを取得します。次に、BluetoothアダプタのMACアドレスのインポートを使用してくださいhcitool dev

スクリプトの編集

次のスクリプト(リンクされたリポジトリからインポートおよび変更)をテキストファイルとして保存し、最初の行に2つの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"

スクリプトの実行

このスクリプトをrootとして実行すると、アダプタはHIDモードに設定され、再接続の問題を解決するだけでなく、BIOS起動時にHDD暗号化パスワードなどの問題も処理します。

おすすめ記事