Como monitorar sua conexão Bluetooth no Linux

Há várias formas de se monitorar uma conexão Bluetooth, no Linux.
Normalmente, você obtém todo o feedback gráfico necessário durante as transferências de conteúdo.
Mas… e quando a transferência é de áudio ou se trata de uma conexão de rede?
Como obter informações sobre o fluxo de dados nestes casos?
Já demonstramos o uso dos utilitários de linha de comando hciconfig e hciutils, no artigo sobre como determinar a versão do Bluetooth de seus dispositivos. Recomendo esta leitura, caso você queira saber mais sobre este assunto.

O padrão de comunicação de dados Bluetooth foi lançado pela empresa sueca Ericsson, em 1994. Mas já vinha sendo desenvolvido desde 1989.

bluetooth logo
O utilitário hciconfig pode ser usado para obter várias informações sobre o dispositivo interno do seu notebook.
Use a opção ‘-a’, para obter alguns dados preliminares sobre ele:

hciconfig -a

A informação que nos interessa, aqui, é que se encontra na 4a e 5a linhas — taxas de recepção e transmissão (RX/TX):

hci0:	Type: BR/EDR  Bus: USB
	BD Address: A4:02:B9:02:85:36  ACL MTU: 1021:5  SCO MTU: 96:6
	UP RUNNING PSCAN 
	RX bytes:12033039 acl:240 sco:223076 events:85742 errors:0
	TX bytes:83500510 acl:84655 sco:222759 commands:326 errors:0
	Features: 0xff 0xfe 0x0f 0xfe 0xdb 0xff 0x7b 0x87
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH HOLD SNIFF 
	Link mode: SLAVE ACCEPT 
	Name: 'inspiration'
	Class: 0x0c010c
	Service Classes: Rendering, Capturing
	Device Class: Computer, Laptop
	HCI Version: 4.2 (0x8)  Revision: 0x1000
	LMP Version: 4.2 (0x8)  Subversion: 0x1000
	Manufacturer: Intel Corp. (2)

O comando watch é muito usado para fazer monitoramento no Linux de arquivos ou de resultados de comandos.
No exemplo, abaixo, vamos monitorar a saída do hciconfig e exibir apenas as linhas que contenham dados que sofram alterações (a cada 2 segundos):

watch -n 2 -d hciconfig
Every 2,0s: hciconfig                      inspiration: Mon Sep 19 16:18:27 2016

hci0:   Type: BR/EDR  Bus: USB
        BD Address: A4:02:B9:02:85:36  ACL MTU: 1021:5  SCO MTU: 96:6
        UP RUNNING PSCAN
        RX bytes:15310713 acl:252 sco:287321 events:85858 errors:0
        TX bytes:86772182 acl:84667 sco:286900 commands:347 errors:0

bluetooth monitoring audio stream on Linux - Monitoramento do stream de audio bluetooth no Linux
Os exemplos, acima, mostram o monitoramento do fluxo de audio Bluetooth.
Você pode fazer a mesma coisa para monitorar uma conexão à Internet via Bluetooth, também.

Como determinar a versão do seu dispositivo Bluetooth

Dispositivos Bluetooth são muito comuns em notebooks e são extremamente úteis para a comunicação de dados — troca de arquivos, conexão à Internet etc.
No entanto, a tecnologia tem tido várias versões, desde o início de seu desenvolvimento (no fim da década de 80).
bluetooth logo
Cada nova versão tem incorporado novos recursos — para transmissão/recepção de dados e correção de problemas.
Saber qual a versão do Bluetooth suportada pelo dispositivo instalado no seu notebook ou desktop PC é importante para saber exatamente quais as suas capacidades — ou seja, saber o que verdadeiramente pode ser feito com ele.

Use o hciconfig para obter informações sobre os dispositivos bluetooth presentes no seu sistema

O hciconfig é uma ferramenta de configuração de dispositivos Bluetooth.
Você pode usá-lo para se referir especificamente a um dispositivo, usando o termo ‘hciX’. Caso esta referência não seja suprida, o utilitário irá buscar e exibir informações sobre todos os dispositivos que forem encontrados.
Ao usar o hciconfig sem qualquer parâmetro ou opção, ele retornará informações básicas sobre os diapositivos locais.

O prefixo HCI são as iniciais para Host Controller Interface ou interface de controle do hospedeiro.
E LMP corresponde a Link Management Protocol ou protocolo de gestão de link — usado para controlar a conexão de rádio entre os dispositivos envolvidos.

Veja um exemplo, com o uso da opção ‘-a’:

hciconfig -a
hci0:	Type: BR/EDR  Bus: USB
	BD Address: A4:02:B9:02:85:36  ACL MTU: 1021:5  SCO MTU: 96:6
	UP RUNNING PSCAN ISCAN 
	RX bytes:2077 acl:0 sco:0 events:192 errors:0
	TX bytes:32521 acl:0 sco:0 commands:191 errors:0
	Features: 0xff 0xfe 0x0f 0xfe 0xdb 0xff 0x7b 0x87
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH HOLD SNIFF 
	Link mode: SLAVE ACCEPT 
	Name: 'inspiration'
	Class: 0x0c010c
	Service Classes: Rendering, Capturing
	Device Class: Computer, Laptop
	HCI Version: 4.2 (0x8)  Revision: 0x1000
	LMP Version: 4.2 (0x8)  Subversion: 0x1000
	Manufacturer: Intel Corp. (2)

Use o comando grep para obter apenas os resultados mais relevantes:

hciconfig -a | grep -i hci 

hci0:	Type: BR/EDR  Bus: USB
	HCI Version: 4.2 (0x8)  Revision: 0x1000

Use o comando ‘version’ para obter esta informação do dispositivo:

hciconfig hci0 version

hci0:	Type: BR/EDR  Bus: USB
	BD Address: A4:02:B9:02:85:36  ACL MTU: 1021:5  SCO MTU: 96:6
	HCI Version: 4.2 (0x8)  Revision: 0x1000
	LMP Version: 4.2 (0x8)  Subversion: 0x1000
	Manufacturer: Intel Corp. (2)

Como obter informações sobre dispositivos Bluetooth conectados

Se você tem dispositivos conectados de versões diferentes, os recursos disponíveis serão reduzidos aos da versão mais antiga.
Por este motivo, pode ser mais interessante saber qual é a versão do dispositivo ao qual o meu notebook está conectado.
Use o utilitário hcitool, para obter informações sobre os aparelhos conectados via Bluetooth ao seu notebook:

hcitool con

O comando acima vai mostrar informações, tais como o endereço MAC do dispositivo Bluetooth pareado ao notebook. Veja:

Connections:
	< ACL 5C:51:88:EB:9F:B1 handle 512 state 1 lm MASTER AUTH ENCRYPT 

De posse do endereço de hardware, acima, já posso inquirir o dispositivo diretamente. Veja como:

hcitool info 5C:51:88:EB:9F:B1

Requesting information ...
	BD Address:  5C:51:88:EB:9F:B1
	OUI Company: Motorola Mobility LLC, a Lenovo Company (5C-51-88)
	Device Name: Wintermute
	LMP Version: 4.1 (0x7) LMP Subversion: 0x7d3
	Manufacturer: Qualcomm (29)

...

Por exemplo, se o notebook usa um dispositivo Bluetooth 4.2 e se conecta ao smartphone com a versão 4.1, é seguro contar apenas com os recursos disponíveis na versão deste último.
Há vários outros comandos no Linux, que podem ajudar a obter informações importantes sobre o seu sistema. Para saber mais, leia Como obter informações sobre o seu sistema.

Referências

https://web.archive.org/web/20071222231740/http://www.information-age.com/article/2001/may/the_bluetooth_blues.
https://en.wikipedia.org/wiki/Bluetooth

Como obter informações sobre o hardware de vídeo no Linux

Quando você precisa relatar algum problema, para conseguir ajuda, pode ser necessário inquirir o seu sistema para saber exatamente qual o modelo de dispositivo em uso.
Você pode obter informações detalhadas sobre a sua placa de vídeo, seja ela dedicada, separada ou integrada ao restante do hardware, com os comandos lspci e lshw.
amd-radeon-graphics-badge-on-dell-laptop
Se quiser entender melhor o funcionamento do lshw, leia este artigo.
Ambos podem ser usados para obter informações sobre diversos aspectos do seu hardware. Neste post, vou me concentrar em obter dados apenas do hardware de vídeo.
O comando grep, neste caso, é essencial para filtrar as informações obtidas e exibir apenas o que interessa. Se tiver dúvidas, leia mais sobre ele aqui.

Como obter informações sobre a placa de vídeo com o comando lspci

O comando é um utilitário voltado para exibir informações sobre o os buses PCI presentes no sistema, bem como os dispositivos conectados a eles.
Com o uso de algumas opções, na linha de comando, é possível obter um saída mais resumida.
É possível também obter uma saída de informações mais verbosa — voltada para hackers mais experientes.
Alguns dados do hardware podem estar disponíveis apenas para usuários com privilégios administrativos — nestes casos, use o comando su ou sudo.
Nos exemplos dados, neste artigo, os comandos são executados pelo superusuário.
Você pode usar o comando lspci, acompanhado das opções ‘-v’, ‘-vv’ ou ‘-vvv’ para obter um resultado cada vez mais abundante de informações. A primeira opção ativa a verbosidade, a segunda aumenta e a última ativa o nível máximo de informações.
Veja um exemplo:

lspci -v | grep -A 20 -i display
04:00.0 Display controller [0380]: Advanced Micro Devices, Inc. [AMD/ATI] Topaz XT [Radeon R7 M260/M265] [1002:6900]
	Subsystem: Dell Device [1028:0643]
	Physical Slot: 4
	Flags: fast devsel, IRQ 7
	Memory at b0000000 (64-bit, prefetchable) [disabled] [size=256M]
	Memory at c0000000 (64-bit, prefetchable) [disabled] [size=2M]
	I/O ports at 3000 [disabled] [size=256]
	Memory at c2000000 (32-bit, non-prefetchable) [disabled] [size=256K]
	Expansion ROM at c2040000 [disabled] [size=128K]
	Capabilities: [48] Vendor Specific Information: Len=08 <?>
	Capabilities: [50] Power Management version 3
	Capabilities: [58] Express Legacy Endpoint, MSI 00
	Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
	Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
	Capabilities: [150] Advanced Error Reporting
	Capabilities: [270] #19
	Capabilities: [2b0] Address Translation Service (ATS)
	Capabilities: [2c0] #13
	Capabilities: [2d0] #1b

Use um número maior para a opção ‘-A’, caso desconfie que haja mais algumas linhas de informações sobre o dispositivo.
As primeiras linhas costumam ser mais do que suficiente para informar o modelo exato de placa de vídeo em uso no sistema.

Como obter informações da placa de vídeo com o comando lshw

Como ele demora um pouco para pesquisar o hardware, costumo guardar suas informações em um arquivo texto, que posso ler sem a necessidade de “invocar superpoderes” e com mais rapidez:

sudo lshw > lshw.log

Para obter informações exclusivamente sobre a classe display, use o comando assim:

lshw -class display
  *-display               
       description: VGA compatible controller
       product: Broadwell-U Integrated Graphics
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 09
       width: 64 bits
       clock: 33MHz
       capabilities: msi pm vga_controller bus_master cap_list rom
       configuration: driver=i915 latency=0
       resources: irq:65 memory:c1000000-c1ffffff memory:d0000000-dfffffff ioport:5000(size=64)
  *-display UNCLAIMED
       description: Display controller
       product: Topaz XT [Radeon R7 M260/M265]
       vendor: Advanced Micro Devices, Inc. [AMD/ATI]
       physical id: 0
       bus info: pci@0000:04:00.0
       version: 00
       width: 64 bits
       clock: 33MHz
       capabilities: pm pciexpress msi cap_list
       configuration: latency=0
       resources: memory:b0000000-bfffffff memory:c0000000-c01fffff ioport:3000(size=256) memory:c2000000-c203ffff memory:c2040000-c205ffff

De posse deste resultado, é possível procurar informações sobre a sua placa gráfica no Google ou em fóruns específicos usando os nomes nos campos product e vendor.

No caso de uma placa de vídeo integrada à placa-mãe, você provavelmente só irá conseguir obter informações úteis se informar o modelo da placa-mãe.
Alguns fabricantes não disponibilizam informações ou manuais sobre a placa de vídeo, em separado, nestes casos.

O comando, a seguir, oferece os dados referentes à placa mãe ou motherboard:

lshw -class bus
Busca do google por nome do dispositivo
Busca do google por nome do dispositivo

Como obter informações da placa de vídeo com o comando dmidecode

O dmidecode pode parecer redundante, depois de falarmos do lshw — uma vez que este último também pesquisa na tabela DMI.
A saída é dada em formatos diferentes, contudo. Vale a pena abordar este comando também.
Veja como obter dados da placa — útil, quando a placa de vídeo é integrada:

dmidecode -t baseboard | grep -B 2 -i product 
Base Board Information
	Manufacturer: Dell Inc.
	Product Name: 0YDTG3

Ou use a opção que segue para obter informações mais detalhadas da placa mãe:

dmidecode --type 2
# dmidecode 2.12
SMBIOS 2.7 present.

Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
	Manufacturer: Dell Inc.
	Product Name: 0YDTG3
	Version: A02
	Serial Number: .SF5WERT3.GR9983062FS132.
	Asset Tag: Not Specified
	Features:
		Board is a hosting board
		Board is replaceable
	Location In Chassis: Type2 - Board Chassis Location
	Chassis Handle: 0x0003
	Type: Motherboard
	Contained Object Handles: 0

Dispositivos on board podem ser exibidos com a seguinte opção:

dmidecode --type 10

Sua lista pode ser maior do que a minha:

# dmidecode 2.12
SMBIOS 2.7 present.

Handle 0x0018, DMI type 10, 6 bytes
On Board Device Information
	Type: Video
	Status: Disabled
	Description: Intel Video Graphics Controller

Use a opção ‘–type 41’, para obter uma relação maior.

Como obter detalhes dos dispositivos USB no seu sistema

Há inúmeras ferramentas, no Linux, disponíveis para os usuários obterem informações sobre as conexões USB presentes no seu sistema.
Neste post, vou falar de algumas, que podem ser úteis para conseguir informações sobre dispositivos conectados a uma destas portas.
O utilitário usb-devices pode ser usado para exibir na tela do terminal detalhes, com bastante informações, sobre BUSes USB no seu sistema, mesmo que não haja algo conectado.
Se houver, contudo, ele irá mostrar informações sobre o device conectado.
linux usb devices

O usb-devices é um shell script (bash) desenvolvido para exibir informações e detalhes dos “buses” USB presentes no sistema, bem como, dos dispositivos anexados

A saída do script é similar ao conteúdo do arquivo de sistema usb/devices que, usualmente, fica sob o diretório /proc/bus:

less /proc/bus/input/devices
I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:10/PNP0C0C:00/input/input0
U: Uniq=
H: Handlers=kbd event0 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

...


I: Bus=0003 Vendor=04f2 Product=b1d8 Version=5563
N: Name="1.3M WebCam"
P: Phys=usb-0000:00:1a.0-1.1/button
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/input/input13
U: Uniq=
H: Handlers=kbd event13 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

Outro arquivo do sistema, relacionado às informações de dispositivos ou sistemas de arquivos USB (caso estejam montados) é o /sys/kernel/debug/usb/devices. Este, contudo, nem sempre está disponível para usuários sem privilégios administrativos:

cat /sys/kernel/debug/usb/devices
cat: /sys/kernel/debug/usb/devices: Permission denied

O script usb-devices não requer privilégios administrativos para retornar informações úteis sobre os dispositivos USB conectados ao seu hardware.
Como limitação, o script só lista as interfaces ativas — aquelas marcadas com um ‘*’ no arquivo /sys/kernel/debug/usb/devices:

sudo cat /sys/kernel/debug/usb/devices | grep "*"
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
C:* #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=01 Driver=usbhid
I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
I:* If#= 2 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
C:* #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=0e(video) Sub=01 Prot=00 Driver=uvcvideo
I:* If#= 1 Alt= 0 #EPs= 0 Cls=0e(video) Sub=02 Prot=00 Driver=uvcvideo

Use o lsusb, para obter informações mais enxutas

Os métodos listados acima, podem trazer informações detalhadas voltadas para desenvolvedores.
O utilitários lsusb é mais útil para quem deseja um conjunto de informações mais sucinto:

lsusb 
Bus 002 Device 003: ID 413c:2501 Dell Computer Corp. 
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 04f2:b1d8 Chicony Electronics Co., Ltd 
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Para obter uma relação mais detalhada, use a opção ‘–verbose’:

lsusb --verbose | less 

Se for executado com privilégios administrativos, o lsusb poderá exibir mais informações.
Como sempre, use o comando grep para filtrar os dados de acordo com suas necessidades:

sudo lsusb --verbose | grep -i bcdusb

O comando acima, irá exibir as versões USB disponíveis no seu sistema.
Veja o que obtive no meu computador de testes (ele é velhinho…):

  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00

Como obter informações sobre dispositivos USB em ambiente gráfico

Quem prefere o ambiente gráfico, pode instalar o usbview:

sudo apt install usbview

Este aplicativo irá retornar um conjunto de informações mais extenso, se for executado com privilégios administrativos:

sudo usbview

usbview
O utilitário usbview exibe as informações obtidas de /sys/kernel/debug/usb/devices — por isto, requer ser executado como super usuário.

Conheça o usbhid-dump

O utilitário usbhid-dump lança o stream de dados vindos de dispositivos USB.
O padrão é monitorar o fluxo de todos os dispositivos.
Mas você pode restringir a um só.
No exemplo que segue, o utilitário irá exibir o fluxo vindo do teclado USB (se você tiver um).
Tenha cuidado: você vai perder o controle do teclado USB, ao executar este comando:

sudo usbhid-dump -es

Para interromper o aplicativo, tecle ‘Ctrl + C’ no teclado nativo do seu notebook.
dump stream from mouse and keyboard to screen
O que este programa faz é desconectar os drivers do kernel, relacionados ao(s) dispositivo(s) em questão — assim, nenhum outro programa vai conseguir captar as entradas a partir daquele(s) dispositivo(s).
Se você não conseguir interromper a desconexão, com ‘Ctrl + C’, basta aguardar o tempo padrão de 60 segundos, para recuperar o controle sobre seu dispositivo USB.
Leia mais em Como obter mais informações sobre as portas USB no Linux.

Como testar o sistema de som no Linux?

Mesmo um computador usado, jogado no canto da casa, pode estar escondendo uma placa de som de boa qualidade.
Recentemente, descobri algumas coisas bem interessantes no meu notebook Samsung Series 5 Ultra, brincando com a placa — com o objetivo de ver o que dava para extrair dela.
A surpresa foi agradável.
Vamos o que você tem por aí?
Abra um terminal e me acompanhe.
Notebook Samsung Ultra series 5

Como descobrir a capacidade do seu hardware de som

Há várias formas de obter informações sobre o hardware de uma máquina no Linux. Neste caso, uma das mais simples é usar o comando aplay.
Com ele é possível ver a relação de dispositivos de som e os recursos disponíveis no seu sistema.
Veja como:

aplay -L

Esta é a minha lista resumida:

default
    Playback/recording through the PulseAudio sound server
null
    Discard all samples (playback) or generate zero samples (capture)
pulse
    PulseAudio Sound Server
sysdefault:CARD=PCH
    HDA Intel PCH, ALC269VC Analog
    Default Audio Device
surround50:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VC Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VC Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VC Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers

...

Como você pode ver, o sistema do exemplo acima pode reproduzir até em 7.1 surround.
Claro que isto não é possível a partir das caixas de som do próprio notebook — não vamos nos iludir 😉
Para usufruir de todo este desempenho da placa de áudio é necessário ligar o notebook a um receiver 7.1 via HDMI.
Ou seja, você precisa ter um equipamento de home theater para se conectar a ele.
configuração da placa de som no Linux

Como testar o sistema de som no Linux

No painel de configurações de qualquer distribuição, é possível abrir a sessão de configuração do som e iniciar um teste.
Mas você pode fazer isto no terminal também. Veja:

speaker-test -c 6 -l 1

Este comando testa os 6 canais de som (5.1) presentes no seu sistema. Você pode testar menos ou mais canais, basta alterar o valor de ‘-c 6’.

Playback device is default
Stream parameters are 48000Hz, S16_LE, 6 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 32 to 349525
Period size range from 10 to 116509
Using max buffer size 349524
Periods = 4
was set period_size = 87381
was set buffer_size = 349524
 0 - Front Left
 4 - Center
 1 - Front Right
 3 - Rear Right
 2 - Rear Left
 5 - LFE
Time per period = 11,028587

O último item ‘LFE’ se refere ao subwoofer, caso você tenha um presente no sistema.
Se prefir ouvir voz humana durante o teste, experimente usar o parâmetro ‘-t’:

speaker-test -c 6 -l 1 -t wav

Por fim, faça a experiência com seus fones de ouvido. O fone padrão do Motorola Moto G 3 consegue simular razoavelmente o som surround.