ການແກ້ໄຂບັນຫາບລູທູດ (Bluetooth)

Dzickus, Hhlp, Devurandom Version 37,38 Last review: 2023-09-04

ບລູທູດ (Bluetooth) ແມ່ນໂປຣໂຕຄໍໄຮ້ສາຍໄລຍະໃກ້ ທີ່ໃຊ້ເພື່ອເຊື່ອມຕໍ່ກັບອຸປະກອນ I/O ທີ່ມີແບນວິດ (bandwidth) ຕໍ່າ (ເຊັ່ນ: ຄີບອດ, ເມົ້າ, ຫູຟັງ). ເວີຊັນໃໝ່ກວ່າຈະມີໂໝດພະລັງງານຕໍ່າ ທີ່ມີແບນວິດ ແລະ ໄລຍະການເຊື່ອມຕໍ່ທີ່ສູງຂຶ້ນກວ່າເກົ່າເລັກນ້ອຍ.

ວິທີແກ້ໄຂບັນຫາບລູທູດນີ້ ປະກອບດ້ວຍ daemon ຂອງ userspace ທີ່ຊື່ວ່າ bluetoothd, ເຊິ່ງເຮັດໜ້າທີ່ສື່ສານຜ່ານພອດຈັດການ (management port) ໃນເຄີເນີນ (kernel) ໄປຫາໄດຣເວີ (driver) ຂອງຮາດແວ. ແອັບພລິເຄຊັນຕ່າງໆທີ່ຕ້ອງການສື່ສານກັບ bluetoothd daemon ແມ່ນຈະເຮັດຜ່ານ d-bus api. ນີ້ລວມເຖິງແອັບເປລັດ (applets) ບລູທູດຕ່າງໆຂອງ GNOME.

ການລະບຸບັນຫາບລູທູດ

ພົບຮາດແວບລູທູດຫຼືບໍ່?

  • ກວດສອບໃຫ້ແນ່ໃຈວ່າ ພົບ ແລະ ເປີດໃຊ້ງານບລູທູດແລ້ວ (ສັງເກດ hci0: ແລະ 'UP RUNNING'):

    $ hciconfig
    hci0:	Type: Primary  Bus: USB
    	BD Address: xx:xx:xx:xx:xx:xx  ACL MTU: 1021:4  SCO MTU: 96:6
    	UP RUNNING PSCAN
    	RX bytes:15047 acl:0 sco:0 events:2433 errors:0
    	TX bytes:599323 acl:0 sco:0 commands:2431 errors:0
  • ຫາກຄຳສັ່ງບໍ່ສະແດງຜົນຫຍັງ (ບໍ່ມີຂໍ້ມູນ hci:), ສະແດງວ່າເປັນບັນຫາທີ່ຮາດແວ

    $ lsusb -v | grep Bluetooth | grep DeviceProtocol
    bDeviceProtocol         1 Bluetooth
  • ຫາກຄຳສັ່ງ lsusb ບໍ່ສະແດງຜົນຫຍັງ, ສະແດງວ່າບໍ່ມີຮາດແວ, ເຊິ່ງອາດຈຳເປັນຕ້ອງໃຊ້ຜົນຈາກ dmesg

  • ຫາກຄຳສັ່ງ lsusb ສະແດງຜົນເປັນ Bluetooth, ໃຫ້ກວດສອບໄດຣເວີທີ່ເຊື່ອມຕໍ່ຢູ່

    $ lsusb -t | grep Wireless
        |__ Port 4: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
        |__ Port 4: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
  • ຫາກຊ່ອງ Driver ວ່າງຢູ່, ຈະຕ້ອງໃຊ້ຜົນຈາກ lsusb -v ເພື່ອເພີ່ມ ids

  • ຫາກ hciconfig ສະແດງຜົນອອກມາ ແຕ່ບໍ່ມີສະຖານະ UP

    $ hciconfig up
  • ລາຍການອຸປະກອນທີ່ຈັບຄູ່ແລ້ວ:

    $ bluetoothctl
    [bluetooth]# show
    [bluetooth]# devices
    [bluetooth]# info <mac addr of any device you have problems with>

bluetoothd daemon ກຳລັງເຮັດວຽກຢູ່ຫຼືບໍ່?

  • ກວດສອບພາຍໃຕ້ systemd ວ່າບລູທູດມີສະຖານະ 'Active' ແລະ 'enabled' ຫລືບໍ່

    $ systemctl status bluetooth
    ● bluetooth.service - Bluetooth service
       Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
       Active: active (running) since Wed 2017-10-04 16:07:40 EDT; 1 day 22h ago
         Docs: man:bluetoothd(8)
     Main PID: 27427 (bluetoothd)
       Status: "Running"
        Tasks: 1 (limit: 4915)
       CGroup: /system.slice/bluetooth.service
               └─27427 /usr/libexec/bluetooth/bluetoothd
  • ກວດສອບວ່າ obex ຖືກຕັ້ງຄ່າໃຫ້ເຮັດວຽກຫຼືບໍ່ (ເພື່ອໂອນຍ້າຍໄຟລ໌ຈາກໂທລະສັບ)

$ systemctl --global --user is-enabled obex
  enabled

ການດີບັກ (debugging) ແບບງ່າຍໆ

ບັນຫາບລູທູດສ່ວນໃຫຍ່ແມ່ນເກີດຂຶ້ນໃນແພັກເກດ bluez (bluetoothd), ເຊິ່ງກໍຄື userspace daemon.

ການເປີດໃຊ້ງານການດີບັກ bluetoothd
  • ແກ້ໄຂໄຟລ໌ /usr/lib/systemd/system/bluetooth.service

  • ເພີ່ມ -d ເຂົ້າໃນແຖວ ExecStart ເພື່ອເປັນຕົວເລືອກໃຫ້ກັບ bluetoothd

  • ບັນທຶກ ແລະ ອອກ

$ systemctl daemon-reload
$ systemctl restart bluetooth

ການດີບັກຖືກເປີດໃຊ້ງານແລ້ວ ແລະ ສາມາດຊ່ວຍລະບຸໄດ້ວ່າບັນຫາຂອງບລູທູດເກີດຂຶ້ນຢູ່ໃສ

ເກັບກຳລັອກ (logs) ເພື່ອນຳໄປໃສ່ໃນລາຍງານ bugzilla
$ journalctl -r -u bluetooth > /tmp/bluetoothd.out

ການແກ້ໄຂບັນຫາເຟີມແວ (firmware)

ບາງຄັ້ງ ເຟີມແວຂອງອະແດັບເຕີບລູທູດອາດຈະຕົກຢູ່ໃນສະຖານະທີ່ບໍ່ສາມາດຈັບຄູ່ກັບອຸປະກອນບລູທູດບາງອັນ (ຫຼື ທັງໝົດ) ໄດ້. ທ່ານອາດຈະສາມາດແກ້ໄຂບັນຫາດັ່ງກ່າວໄດ້ໂດຍການຣີເຊັດອະແດັບເຕີຂອງທ່ານ.

ໃນກໍລະນີຂອງແລັບທັອບທີ່ມີອະແດັບເຕີບລູທູດໃນຕົວ, ສາມາດເຮັດໄດ້ດັ່ງນີ້:

  1. ເຂົ້າໄປທີ່ການຕັ້ງຄ່າເຟີມແວຂອງແລັບທັອບ (BIOS) ແລ້ວປິດການໃຊ້ງານອະແດັບເຕີໃນຕົວ

  2. ບັນທຶກການຕັ້ງຄ່າ ແລະ ເລີ່ມຕົ້ນແລັບທັອບໃໝ່

  3. ເຂົ້າໄປທີ່ການຕັ້ງຄ່າເຟີມແວອີກຄັ້ງ ແລ້ວເປີດໃຊ້ງານອະແດັບເຕີບລູທູດຄືນໃໝ່

  4. ບັນທຶກ ແລະ ເລີ່ມຕົ້ນລະບົບໃໝ່

  5. ຈາກນັ້ນໃຫ້ລອງຈັບຄູ່ອຸປະກອນອີກຄັ້ງ