Bluetooth 키보드의 절전 모드 방지

Bluetooth 키보드의 절전 모드 방지

몇 분(천만?) 동안 활동이 없으면 키보드가 절전 모드로 전환됩니다. 키를 누른 다음 다시 사용하려면 5초를 기다려야 합니다.

먼저, 몇 가지 기술적인 세부 사항은 다음과 같습니다.

  • 리눅스 민트 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

다른 아이디어가 있나요? 블루투스 옵션? USB 옵션? 키보드 옵션? 어쩌면 간섭하지 않는 스크립트 + cron을 사용하여 계속 유지할 수 있을까요?

(나는 "Mint가 Linux가 아니다"라는 것을 알고 있지만 여러분이 askubuntu Stack Exchange 커뮤니티보다 더 개방적이기를 바랍니다 :-))

편집: 블루투스 헤드셋을 연결했습니다. 키보드만 잠자기 상태인 것 같습니다. 헤드셋은 활성 상태로 유지됩니다. 키보드가 절전 모드일 때 블루맨 관리자(오른쪽 클릭 + 연결)에서 키보드를 수동으로 연결할 수 없는데 헤드셋은 연결할 수 있습니다.

답변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.

스크립트 편집

다음 스크립트(링크된 저장소에서 가져와 수정됨)를 텍스트 파일로 저장하고 첫 번째 줄에 두 개의 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"

스크립트 실행

이 스크립트를 루트로 실행하면 어댑터가 HID 모드로 설정되어 재연결 문제를 해결할 뿐만 아니라 BIOS 시작 시 HDD 암호화 비밀번호와 같은 문제도 처리합니다.

관련 정보