Posts com Tag ‘drivers’

1. Introdução
Ao instalar o Debian 8 (“jessie”) em um laptop HP-Compaq 6710b, observa-se que sua interface wifi ainda não está funcionando e o áudio está na situação “mudo”. Esse post procura contribuir com a solução destes incovenientes.

2. Sobre o wifi
2.1 BIOS
O laptop tem na BIOS uma opção de bloquear a interface wifi. Verifique para que esta opção esteja habilitando o funcionamento do wifi.

2.2 Usar componentes non-free
Adicionar ao arquivo que contém a lista de fontes de pacotes (/etc/apt/sources.list) o componentes non-free. A título de exemplo, a entrada poderia ficar assim:

deb http://ftp.br.debian.org/debian/ jessie main non-free

2.3 Instalar o firmware e reiniciar o computador

# apt-get update
# apt-get install firmware-iwlwifi
# reboot

2.4 Verificar se firmware está instalado e funcionando
Ao reiniciar a máquina, o wifi já deverá estar funcionando. Adicionalmente, verifique:


# lspci -v
10:00.0 Network controller: Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection (rev 61)
	Subsystem: Intel Corporation Device 1000
	Flags: bus master, fast devsel, latency 0, IRQ 46
	Memory at e4100000 (64-bit, non-prefetchable) [size=8K]
	Capabilities: [c8] Power Management version 3
	Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
	Capabilities: [e0] Express Endpoint, MSI 00
	Capabilities: [100] Advanced Error Reporting
	Capabilities: [140] Device Serial Number 00-21-5c-ff-ff-93-61-dd
	Kernel driver in use: iwl4965

Vemos que se está se utilizando o driver “iwl4965”. Assim, fora instalado o driver e, estando agora a interface wifi funcionando, temos superado o problema da interface wifi.

3. Sobre o áudio
Inicialmente não havia áudio. A razão disso é que o status da interface está em “mudo”. Ative o áudio da seguinte maneira:

# alsamixer
Com o alsamixer, levante o volume do som e digite “M” para sair do modo “mudo”. Pronto, o som deve funcionar.
Obs: se necessário, utilize a opção F6 para selecionar o cartão de áudio.

Por último:
# alsactl store
salvando para o arquivo de configuração o corrente estado do driver relativo ao cartão de som selecionado.

Referências
1- Instalar driver de Wifi no laptop Lenovo E430 ThinkPad usando Debian
2- Instalar driver de Wifi no laptop HP Pavilion dv2040 usando Debian
3- Entendendo melhor como funcionam os drivers em máquinas Linux

1. Introdução
O desafio era deixar uma máquina com Debian 8 (“Jessie”) poder imprimir numa impressora Lexmark X656de que estava numa rede Windows.

2. Instalar pacotes software
Para isto, faça a instalação dos seguintes pacotes:
# apt-get install system-config-printer cups cups-client smbclient

3. Tentar selecionar driver disponível
Para poder criar a impressora, utilize o seguinte comando:
# system-config-printer

a) Utilizar a opção “Impressora do Windows via Samba”, e fornecer o endereço da impressora e suas informações de autenticação (que devem estar cadastradas através do gerenciamento da rede de dados).

Selecionar impressora

b) A seguir, vamos escolher um driver disponível: selecionar a opção “Selecionar impressora da base de dados”, marcar impressora “Lexmark” e tentar achar o seu driver. O problema acontece aqui: não se acha disponível o driver correspondente a impressora.

Selecionar base de dados

Selecionar base de dados

Escolher o driver correspondente a impressora.

Escolher o driver correspondente a impressora.

4. Baixar e instalar o arquivo PPD
Volte na tela anterior e escolha a opção “Fornecer arquivo PPD”.

Escolher opção -selecionar ppd-

O arquivo PPD para a impressora pode ser encontrado na página oficial da Lexmark na internet. No caso, baixei o arquivo “Lexmark-X656de-Postscript-Lexmark.ppd”

Página da Lexmark na internet

Pronto, a impressora deverá estar acessível da máquina Debian.

Ao instalar uma imagem Debian (a que eu usei foi a versão 8 do Debian – “jessie”) no lap-top Lenovo E430 ThinkPad, nos deparamos com o problema da interface wifi não funcionar. Durante a instalação do Debian já temos a mensagem de que faltavam os firmwares rtl8168e-3.fw e bcm43xx-0.fw.

Para deixar a interface wifi funcionando precisamos instalar drivers proprietários (infelizmente!). Para isso, proceder assim:

a) Indicar os repositórios não livres
Adicionar as sessões de repositórios “contrib” e “non-free” na lista de repositórios (arquivo /etc/apt/sources.list). Um bom exemplo pode ser o seguinte arquivo sources.list:

deb http://ftp.br.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.br.debian.org/debian/ jessie main
#
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main
#
# jessie-updates, previously known as 'volatile'
deb http://ftp.br.debian.org/debian/ jessie-updates main
deb-src http://ftp.br.debian.org/debian/ jessie-updates main

b) Instalar o firmware
Instalar 3 (três) pacotes, conforme abaixo mostrados através da figura:
Pacotes com firmware broadcom

Referências:
1- Lenovo ThinkPad Edge E530
2- Debian: Lenovo Thinkpad Edge e530 – Drivers Wifi
3- Listagem de dispositivos wireless devices com informação sobre o seu chipset, e se são suportados em Linux

4- Instalar driver de Wifi no laptop HP Pavilion dv2040 usando Debian
5- Entendendo melhor como funcionam os drivers em máquinas Linux

1. Introdução
Atualmente, Unix (ou *nix) é o nome dado a uma grande família de Sistemas Operativos que partilham muitos dos conceitos dos Sistemas Unix originais (o GNU/Linux, embora compartilhe conceitos de sistemas da família Unix, não faz parte desta família por não compartilhar de código derivado de algum sistema da família Unix e não possuir o mesmo objetivo e filosofia no qual o Unix se originou). Um sistema Unix consiste, basicamente, de duas partes:

Estrutura do Unix

A estrutura do sistema Unix.

  • Núcleo – o núcleo do sistema operacional, a parte que relaciona-se diretamente com o hardware, e que executa num espaço de memória privilegiado. Agenda processos, gerencia a memória, controla o acesso a arquivos e a dispositivos de hardware.
  • Programas de sistema – são aplicações, que executam em espaços de memória não privilegiados, e que fazem a interface entre o usuário e o núcleo. Consistem, principalmente, de:

    – conjunto de biblioteca C (libc);
    – shell – um ambiente que permite que o usuário digite comandos;
    – programas utilitários diversos – são programas usados para manipular arquivos, controlar processos etc;
    – ambiente gráfico (GUI – graphics user interface), onde utiliza-se também deste ambiente gráfico para facilitar a interação do usuário com o sistema.

O servidor X é um simpático nome para se referir genericamente a quaisquer das implementações do padrão X11 do X-Window System definida na década de 80 pelo MIT. O X11 é o padrão adotado para ser responsável pelo ambiente de operação gráfica do S.O. GNU/Linux.

1.1 Ambiente gráfico
O S.O. GNU/Linux, através de suas diversas distribuições (inclusive o Debian), suporta vários tipos de ambientes gráficos de forma totalmente funcional. São ambientes gráficos: o KDE, Gnome, BlackBox e Xfce, entre outros. O ambiente gráfico utiliza uma combinação de tecnologias e dispositivos para fornecer uma plataforma com a qual o usuário pode interagir com a máquina. Mas, essencialmente, o ambiente gráfico Linux é considerado uma combinação entre um “display server” (servidor gráfico) e um “window manager” (gerenciador gráfico ou gerenciador de janelas), que juntos proporcionam ao usuário uma interface gráfica rica (ambiente desktop). São exemplos de cada um destes:
display servers (servidor gráfico baseado no padrão X11): X.Org Server, XFree86.
window manager (gerenciador gráfico ou gerenciador de janelas): Awesome, Compiz, OpenBox, KWin (“window manager” para o KDE), Mutter (“window manager” padrão para o GNOME 3), xfwm4 (“window manager” padrão para o Xfxe).

O “display server” utilizado atualmente em todas as distribuições GNU/Linux é o X.Org Server, uma das implementações do X-Window System.

GUI

Camadas da GUI: no X, o “window manager” e o “display server” são programas distintos.

1.2 Display server (servidor gráfico)
X client serverOs “display servers” utilizados no ambiente Unix-like são implementações do X-Window System (ou X11, X, e as vezes informalmente X-Windows) que têm a responsabilidade de fazer toda a interface direta com o hadware da placa de vídeo, do dispositivo de apontamento (geralmente o mouse) e do teclado. Além disso, dá suporte a uma interface com o usuário e fornece outros elementos básicos, como as fontes gráficas. Em termos simples, o X-Window System fornece uma interface gráfica de usuário (GUI) que permite dar suporte a um ambiente de Desktop. O que o servidor gráfico X-Window System gerencia:

  • configuração da placa de vídeo e do driver correspondente;
  • configuração do teclado;
  • configuração da porta e do tipo do mouse;
  • configuração das características do monitor (frequências de varredura, resolução, quantidade cores….)

O X fornece a estrutura básica para um ambiente gráfico de usuário (GUI): desenhar e mover as janelas na tela e interação com um mouse e teclado. No entanto, no servidor gráfico não há a visualização de ícones, menus ou quaisquer outros recursos mais elaborados que determinam uma boa interface de usuário. Esses recursos mais avançados são providos pelos “window managers” (gerenciadores gráficos ou gerenciadores de janelas). Como tal, o estilo visual de ambientes baseados no X pode variar muito.

Ao contrário de muitos outros ambientes GUI de sistemas operacionais, o X se comporta como um servidor. Isto significa que cada programa GUI de usuário que é executado é um cliente do X e há uma instância do servidor X em execução na máquina.

O X-Window System tem sua funcionalidade conseguida através da cooperação de componentes separados, em vez de tudo estar compactado em uma única e enorme codificação. O melhor exemplo desta situação é o conceito de “window manager” (gerenciador gráfico ou gerenciador de janelas) que é, essencialmente, o componente que controla a aparência das janelas e proporciona os meios pelos quais o usuário pode interagir com elas. Praticamente tudo o que aparece na tela no X está dentro de janelas, e um “window manager” faz o gerenciamento delas.

XOrg

Comunicação do X.Org Server com seus clientes através do protocolo X11.

Como dito anteriormente, o “display server” utilizado atualmente em todas as distribuições GNU/Linux é o X.Org Server.

Um pouco de história da especificação do X-Window System
Vários termos são usados para se referir ao X-Window System: “X”, “X-Window”, “X Version 11″, “X11″, “X11R6″ ou “X11R7″. O X-Window System é uma especificação de servidor gráfico com o conceito de janelas, originalmente chamado simplesmente de X, desenvolvido no MIT em 1984. Desde setembro de 1987 o protocolo contido no X está na sua versão 11 e por isso carrega no seu nome este número. Os ambientes gráficos Gnome, KDE, Xfce, Window Maker, Flux Box, etc, todos necessitam de uma implementação do X para funcionar.

Antes de 2004, o projeto XFree86 era uma implementação do X-Window System. Foi originalmente escrito para sistemas operacionais Unix-like em computadores IBM PC compatível e tornou-se disponível para muitos outros sistemas operacionais e plataformas. Durante a maior parte da década de 1990 e meados de 2000, o projeto XFree86 foi a fonte de maior inovação do X. Até início de 2004, ele era quase universal em máquinas com GNU/Linux e BSD. Em fevereiro de 2004, com a versão 4.4.0, o projeto XFree86 adotou uma mudança na licença que a Free Software Foundation considerou incompatível com a GPL. A maioria dos desenvolvedores XFree86, que já estavam incomodados com outras questões no projeto, migraram para um outro projeto, o X.Org, que logo se tornou dominante no mundo Linux. Assim, criou-se a X.Org Foundation em 2004 fruto da junção de forças entre um organismo que supervisionava as normas X e os ex-desenvolvedores XFree86. Isso fez com que atualmente o “display server” utilizado em todas as distribuições GNU/Linux seja o X.Org Server.

O projeto X.Org passou a ser desde 2004 a referência da implementação do X-Window System. Chama-se de X.Org Server (geralmente abreviado para Xorg Server, XServer ou apenas Xorg) as liberações de pacotes do servidor X gerenciadas pela X.Org Foundation. A primeira versão do X.Org Server foi um “fork” do XFree86 versão 4.4 RC2. O servidor X.Org tem dado suporte a maioria dos dispositivos gráficos modernos dos mais diversos fornecedores, o que tem tornado obsoleto o servidor XFree86.

Dessa forma, pode-se dizer que quando um aplicativo tem a referência de ser executado no Linux X11, isto quer dizer que ele se integra tanto no Gnome, KDE, Xfce ou outros ambientes gráficos sem problemas.

1.3 Window manager (gerenciador gráfico ou gerenciador de janelas)
O GNU/Linux possui diversos gerenciadores gráficos diferentes. Alguns muito simples e outros mais complexos e cheio de recursos. O “window manager” proporciona ao ambiente gráfico a aparência e as funcionalidades esperadas incluindo as bordas das janelas, botões, truques de mouse, menus etc. Como no sistema Linux o “display server” (X-Window System) é separado do “window manager”, dizemos que seu ambiente gráfico é do tipo cliente-servidor. O “display server” funciona como servidor e interage diretamente com o mouse, o teclado e o vídeo. Já “window manager” funciona como cliente e se aproveita dos recursos disponibilizados pelo “window manager”.

O X-Window System não especifica um gerenciador de janelas em particular. A aparência e preferência do X-Window System é deixada para o usuário. São exemplos de gerenciadores de janelas disponíveis para o Linux: Awesome, Compiz, OpenBox, Twm, fvwm2, AfterStep, Window Maker, Blackbox, Enlightment, kwm e outros.

1.4 O X no Debian
Atualmente a versão do X adotada no Debian é derivada da versão lançada pela X.Org Foundation, e é frequentemente também chamada de “X.Org”. Todos os termos para se referir ao X-Window System citados acima são funcionalmente intercambiáveis num sistema Debian. É fácil identificar a versão do X.Org em utilização:
$ apt-cache show xserver-xorg | grep Version
Version: 1:7.7+3~deb7u1

Pela resposta acima, a versão é 7.7

Após instalado, a pasta onde se encontra seus arquivos é a /etc/X11/ .
Para configurar o X.Org, um bom guia pode ser encontrado em Debian Xorg.
Para entender detalhes sobre os arquivos de configuração do Xorg X server, utilize:
$ man xorg.conf.d
$ man intel

Em princípio não há necessidade de existir o arquivo /etc/X11/xorg.conf, pois o X.Org lerá o hardware cada vez de sua iniciação, possuindo excelente sistema de reconhecimento de hardware e autoconfiguração. Assim, normalmente não haverá qualquer necessidade de configuração manual. Mas é importante registrar estes arquivos:
/root/xorg.conf.new     (gerado quando do comando manual Xorg -configure)
/var/log/Xorg.0.log         (gerado a cada iniciação do Xorg)
/var/log/Xorg.0.log.old

OBS: quando for necessário criar um arquivo xorg.conf, é necessário parar o X e executar alguns comandos. Exemplificaremos aqui os passos necessários:
a) Mudar para um console de comandos como root (não através de um emulador de terminal no X, utilize-se, por exemplo, de <Ctrl><Alt>F1 ou <Ctrl><Alt>F2).
b) Parar o X (aqui vamos fazê-lo parando o serviço de “display manager” em uso):
# /etc/init.d/gdm stop && /etc/init.d/gdm3 stop && /etc/init.d/kdm stop && /etc/init.d/xdm stop && /etc/init.d/lightdm stop
OBS: para saber o gerenciador de log in em uso basta executar o comando:
$ cat /etc/X11/default-display-manager
c) Em seguida, executar:
# X -configure
o que fará a criação do arquivo xorg.conf.new na pasta /root.
d) Para fazer valer este arquivo, faça sua cópia para a pasta /etc/X11 conforme o comando abaixo:
# mv /root/xorg.conf.new /etc/X11/xorg.conf
e) Agora reiniciar o X (aqui vamos fazê-lo através do serviço de “display manager”, onde estamos utilizando o lightdm):
# service lightdm start

O servidor X é executado em um terminal virtual atribuído pelo Linux. Esse terminal é o sétimo terminal virtual e que pode ser alcançado através da combinação de teclas Ctrl+Alt+F7 do teclado. Os outros terminais (do primeiro ao sexto terminal) tem-se shell puro e podem ser alcançados através da combinação de teclas Ctrl+Alt+Fx, onde “x” representa o número do terminal virtual desejado. Outra forma de se ter acesso a um terminal é através de um aplicativo de emulação de terminal através do próprio X, as chamadas sessões xterm. Xterm fornece uma sessão de terminal Linux/UNIX que permite ao usuário executar comandos shell e ver a saída.

2. O gerenciador de janelas – ambiente Desktop

2.1 Os icons dos programas
Quando um programa é instalado, ele pode criar um arquivo “nome_programa.desktop” na pasta /usr/share/applications. Isto é suficiente para obter um lançador no painel desktop e no menu do desktop independentemente do gerenciador de janelas em uso (Xfce, GNOME ou KDE).

3. X RandR e xrandr
X RandR (X “resize and rotate” extension) é usado para configurar quais portas de “displays” estão habilitadas (por exemplo, LCD, VGA e DVI), e configurar os seus modos e as propriedades, tais como orientação, reflexão e DPI de exibição. Esta é a maneira mais simples e poderosa para obter sistemas multi-monitor funcionando usando versões recentes do Linux com chipsets gráficos, tais como o Intel 945GM/GMS e ATI Radeon. X RandR é um protocolo de comunicação escrito como uma extensão do protocolo X11 para “display servers”. X RandR provê capacidade de redimensionar, girar, atualizar e refletir a janela raiz de uma tela.

Já xrandr é uma ferramenta oficial baseada em linha de comandos destinada a fazer a configuração da extensão X RandR, o qual permite a (re)configuração do servidor X em tempo de execução (ou seja, sem reiniciá-lo). Para obter auxílio desta ferramenta:
$ xrandr --help
$ man xrandr

Para Intel graphics: $ man intel
Para ATI graphics: $ man radeon

No momento deste post a versão da ferramenta randr em uso era a 1.3, como pode-se ver:
$ xrandr -v
xrandr program version 1.3.5

3.1 A tela (“screen”) virtual
É necessária uma entrada na subseção “Monitor” da de xorg.conf para determinar o tamanho da reserva de memória necessária ao quadro em que os monitores devem caber. Sem ela, o tamanho máximo virtual será limitado ao tamanho do maior display que foi ligado quando o X foi iniciado. O tamanho máximo virtual não pode ser alterado uma vez que o X tenha iniciado, assim precisa ser grande o suficiente para acomodar a maior combinação de monitores que se deseja conectar sem ter que reiniciar X. Quanto maior a área virtual, maior a quantidade de memória necessária.

Virtual Screen

4. Comandos
Uma maneira fácil de utilizar comandos para o X é através da interface de linha de comando com xrandr. A xrandr permite controle dinâmico sobre as saídas de vídeo, resoluções, orientação … e adicionar novos monitores on-the-fly, sem reiniciar o servidor X. Mas nem todos os drivers são suportados. Os que fazem são: Intel, ATI (driver OpenSource), radeonhd (OpenSource driver), nv (nvidia driver 2D) e nouveau (OpenSource driver nvidia). No momento deste post, NVidia não suportava xrandr. A opção é utilizar a própria tecnologia da NVidia chamada TwinView

Vejamos dois exemplos de uso da ferramenta xrandr, consultando o hardware sobre saídas vídeo:


$ xrandr -q
Screen 0: minimum 320 x 200, current 1600 x 900, maximum 8192 x 8192
LVDS-1 connected 1600x900+0+0 (normal left inverted right x axis y axis) 345mm x 194mm
   1600x900       60.0*+
   1152x864       60.0  
   1024x768       59.9  
   800x600        59.9  
   640x480        59.4  
   720x400        59.6  
   640x400        60.0  
   640x350        59.8  
VGA-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)


$ xrandr -q
Screen 0: minimum 320 x 200, current 1600 x 900, maximum 8192 x 8192
LVDS-1 connected 1600x900+0+0 (normal left inverted right x axis y axis) 345mm x 194mm
   1600x900       60.0*+
   1152x864       60.0  
   1024x768       59.9  
   800x600        59.9  
   640x480        59.4  
   720x400        59.6  
   640x400        60.0  
   640x350        59.8  
VGA-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected (normal left inverted right x axis y axis)
   1920x1080      60.0 +   50.0     25.0     30.0  
   1680x1050      60.0  
   1280x1024      75.0     60.0  
   1440x900       59.9  
   1280x960       60.0  
   1280x720       50.0     60.0  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   720x576        50.0  
   720x480        59.9  
   640x480        72.8     75.0     66.7     60.0     59.9  
   720x400        70.1

Já pela primeira resposta acima, observa-se a existência de 3 saídas de vídeo na máquina: LVDS, VGA e HDMI. LVDS representa a própria tela interna do laptop. As saídas VGA e HDMI estão sem conexão a qualquer monitor externo, enquanto a saída LVDS está conectada e suporta 8 modos a 60 Hz. Na segunda resposta, a diferença está no fato da saída HDMI passar a estar conectada a um monitor externo. Esta saída HDMI possui 13 modos em diversas frequências de atualização do vídeo.

Pelo exemplo acima podemos ver todas as resoluções suportadas pelos monitores, e até mesmo o tamanho físico destes (no caso da tela do laptop, esta tem tamanho 345mm de largura x 194mm de altura). Para a tela interna de LCD, saída LVDS, vê-se que sua proporção é de 16:9, o que é hoje de certa forma um padrão. Esta proporção é confortável para filmes em DVD, jogos e exibição de múltiplas janelas lado a lado. Veja o cálculo:
194mm x 16/9 = 345mm

O modo marcado com um asterisco (*) é o modo de corrente. O marcado com um sinal positivo (+) é o modo preferido (também chamado modo padrão). A maioria dos monitores relatam um modo preferido para o driver. E o servidor/driver geralmente escolherá este modo por padrão. O modo preferido é automaticamente selecionado quando utiliza-se o comando xrandr com a opção “--auto“.

Exemplos de comandos:
a) Mudar a resolução da tela do laptop para 1152×864:
$ xrandr --output LVDS-1 --mode 1152x864

b) Para configurar a área de trabalho estendida, no caso a HDMI, em 1600×1200 abaixo e à direita da LVDS:
$ xrandr --output HDMI-1 --mode 1600×1200 --above LVDS-1

c) Iniciar o monitor HDMI usando a resolução 1280×1024 e sua colocação é à direita da tela LVDS:
$ xrandr --output HDMI-1 --mode 1280x1024 --right-of LVDS-1

d) Desabilitar o display VGA externo:
$ xrandr --output VGA-1 --off

e) Consultar todas as saídas e habilitá-las com seu modo preferido:
$ xrandr --auto

f) outros exemplos de comandos:

$ xrandr --output LVDS-1 --mode 1600x900 --pos 0x0 --output HDMI-1 --mode 1280x1024 --pos 800x0
$ xrandr --output LVDS-1 --mode 1600x900 --output HDMI-1 --mode 1920x1080 --right-of LVDS-1
$ xrandr --output LVDS-1 --mode 1600x900 --output HDMI-1 --mode 1280x1024 --right-of LVDS-1
$ xrandr --output LVDS-1 --mode 1600x900 --output HDMI-1 --mode 1280x1024 --pos 1800x0
$ xrandr --output LVDS-1 --auto --output HDMI-1 --auto --right-of LVDS-1
$ xrandr --output LVDS-1 --mode 1600x900 --output HDMI-1 --mode 1280x1024 --above LVDS-1
$ xrandr --output HDMI-1 --mode 1920x1080 --rate 60 --right-of LVDS-1
$ xrandr --output HDMI-1 --auto --right-of LVDS-1
$ xrandr --output LVDS-1 --primary --auto --output VGA-1 --right-of LVDS-1 --auto

OBS:
– opções para localização relativa das saídas: --right-of/--left-of/--above/--below.

4.1 Entendendo um pouco mais os parâmetros de respostas
Vejamos um comando xrandr da seguinte forma, e os parâmetros de status dos monitores:
$ xrandr --output LVDS-1 --mode 1600x900 --output HDMI-1 --mode 1280x1024 --pos 1800x0


$ xrandr -q
Screen 0: minimum 320 x 200, current 3080 x 1024, maximum 8192 x 8192
LVDS-1 connected 1600x900+0+0 (normal left inverted right x axis y axis) 345mm x 194mm
   1600x900       60.0*+
   1152x864       60.0  
   1024x768       59.9  
   800x600        59.9  
   640x480        59.4  
   720x400        59.6  
   640x400        60.0  
   640x350        59.8  
VGA-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected 1280x1024+1800+0 (normal left inverted right x axis y axis) 509mm x 286mm
   1920x1080      60.0 +   50.0     25.0     30.0  
   1680x1050      60.0  
   1280x1024      75.0*    60.0  
   1440x900       59.9  
   1280x960       60.0  
   1280x720       50.0     60.0  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   720x576        50.0  
   720x480        59.9  
   640x480        72.8     75.0     66.7     60.0     59.9  
   720x400        70.1

Observamos:
– o tamanho máximo da tela virtual (“virtual screen”) continua sendo uma matriz máxima de 8192 x 8192;
– em uso corrente, uma matriz de 3080 x 1024. Ou seja, 1600 (para a tela do LVDS) + 1280 (para a tela do monitor da interface HDMI) + 200 (distância entre as 1600 posições da tela do LVDS e o início da tela do HDMI – que se inicia em 1800).

4.2 GUIs

Várias interfaces gráficas estão disponíveis para o X RandR (todas utilizando GTK):
Grandr
URandR
ARandR
Zarfy
LXrandr

5. Refresh rate
As células de um monitor se apagam muito rapidamente, por isso a imagem precisa ser atualizada várias vezes por segundo, processo chamado “refresh”. Quanto mais alta a taxa de atualização melhor para os olhos humanos. Se essa taxa for pequena, o olho humano perceberá uma certa cintilição luminosa da tela, efeito este chamado “flicker”. Na prática, níveis de refresh de tela acima de 60Hz são desejáveis.

Como calcular o refresh rate? Depende de duas variáveis: a frequência horizontal de varredura e o número de linhas da tela. Por exemplo, um monitor que trabalha com frequência horizontal de 71KHz (71 mil linhas por segundo), ao atualizar um um vídeo com resolução de 1280×1024 (onde teríamos 1024 linhas horizontais) teria uma taxa de refresh de 69Hz (ou seja, a tela seria atualizada 69 vezes em 1 segundo):
71000/1024 = 69,3

6. Trocar o Window Manager padrão
É possível trocar o window manager padrão em utilização no ambiente desktop por um outro de preferência do usuário.

6.1 Como usar o KWin window manager no ambiente desktop Xfce
Sabemos que o window manager padrão do Xfxce é o Xfwm4. Que é um bom gerenciador de janelas, pequeno, mas com funcionalidades e efeitos bastante limitados. O KWin pode ser usado com outros ambientes de desktop além do KDE, apesar de que na prática termos que instalar quase todo ambiente KDE (KDE libraries) e gerar certo “inchaço” de recursos do KDE no ambiente. Se não for desejado isso, melhor não fazer a instalação do Kwin. Mas a combinação Xfce + Kwin tem funcionado muito bem.

Para trocar o xfwm4 pelo kwin deve-se:

a) Instalar o Kwin
# apt-get install kde-window-manager
O pacote “kde-window-manager” contém alguns dos programas e bibliotecas básicas do KDE, incluindo o próprio KWin.

b) Passar a utilizar o Kwin manualmente
Uma vez estando o Kwin instalado, pode-se testá-lo com um simples comando a partir do terminal:
$ kwin --replace &

Com este comando provavelmente vai se ter um segundo ou dois de cintilações, mas se tudo funcionar bem, já se deve ter as fronteiras originais das janelas Xfce substituídas pelo estilo padrão Oxygen KDE e uma sombra azul clara sob suas janelas. Tendo isso, tem-se o KWin funcionando!

Se desejar voltar ao Xfwm4, basta executar:
$ xfwm4 --replace &

c) Limpar o cache de log in
Em algumas situações pode acontecer que ao iniciar o Xfce o window manager escolhido seja o Kwin automaticamente. Isso se deve ao cache de iniciação em ~/.cache/sessions/. Limpe o cache de iniciação:
$ rm ~/.cache/sessions/*
OBS: para ter certeza da limpeza do cache, faça este procedimento quando tiver na tela o seu gerenciador de login. Para isto, abra um terminal (por exemplo, Ctrl+Alt+F1) e realize o comando. Após isto, volte (Ctrl+Alt+F7) e faça o log in.

d) Toda vez que iniciar o ambiente desktop Xfce e desejar trocar o window manager padrão Xfwm4 pelo Kwin, basta executar novamente este comando. Mas se desejar eliminar este trabalho de executar esse comando cada vez que o Xfce for reiniciado, observe os passos a seguir para automatizar esse processo (iniciar automaticamente KWin quando o Xfce for inicializado).

Opção 1: fazer autostart de aplicação Xfce (a maneira fácil)

Isso provavelmente também é a maneira mais segura e recomendada. O KWin será diretamente iniciado quando o usuário fizer log in (evitando que o Xfwm4 comece em primeiro lugar e fosse substituído posteriormente pelo Xfwm4). O usuário também ganha em conforto pois evita-se aquela ligeira cintilação quando da substituição do Xfwm4 pelo KWin.

Para isso, deve-se abrir o “Gerenciador de Configurações” do Xfce, ir para “Sessão e Inicialização”, conforme mostra a figura abaixo:

Kwin replace

Então clique na aba “Início Automático de Aplicativo”, e clique no botão “Adicionar” (botão que tem o “sinal mais”) para adicionar um novo programa na lista de autostart. Na janela de diálogo que se abrirá, preencha os campos:

Name: pode-se colocar qualquer nome aqui. Por exemplo: Kwin Autostart.
Description: novamente, qualquer coisa que se queira.
Command: aqui é a parte importante. Deve-se colocar o comando usado auteriormente: “kwin --replace“.

Então clique no botão OK, e tudo estará preparado. De agora por diante, KWin será autoinicializado quando o usuário fizer log in no Xfce!

Para voltar para a configuração inicial de forma a utilizar o “window manager” Xfwm4, tudo que se tem que fazer é desmarcar a caixa e fazer novamente log in no Xfce. OBS: por prudência, recomenda-se limpar o cache de log in na forma colocada mais acima neste post.

Opção 2: editar xfce4-session.xml
Editar um arquivo de configuração XML utilizado pelo Xfce na inicialização:
# vim /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml
Obs: é recomendado fazer o backup do arquivo para o caso de desejar voltar à configuração original.

Uma vez com o arquivo aberto, encontre a linha abaixo:
<value type="string" value="xfwm4"/>

Xfce arquivo de configuração

Observe a figura acima. Agora altere “xfwm4” por “kwin”:

Salve o arquivo e é só isso. Agora só iniciar o Xfce novamente.

A vantagem deste método é que Xfwm4 também nunca irá começar quando do log in no Xfce, tornando a partida do KWin parecer mais perfeita. Por outro lado, se este método falhar ao iniciar KWin, o Xfwm4 também não vai ser iniciado e nã teremos um “window manager” ativo no ambiente. Isso fará com que as janelas se apresentem sem as suas bordas, nem ícones e nem botões de controle, o que não é agradável.
Obs: por prudência, novamente recomenda-se limpar o cache de log in na forma colocada mais acima neste post.

e) Definindo espaços de trabalhos do Xfce com kwin
Pressione Ctrl+F8 e clique na tecla “+” até se ter o número de desejado de espaços de trabalho. Para diminuir os espaços de trabalho, Ctrl+F8 e clique na tecla “-“.

7. OpenGL Tech Demos
Filmes demonstrativos, visualmente deslumbrantes, com códigos escritos seguindo a especificação OpenGL (várias versões). Para aqueles que desejassem executar estas demonstrações em tempo real seria recomendado usarem uma placa gráfica NVIDIA GeForce GTX 780 … ou uma NVIDIA GeForce TITAN Preto para um ótimo desempenho destas demos.
Unreal Engine 4 with OpenGL on Linux
the timeless by mercury @ Revision 2014
OpenGL vs DirectX 11 on Unigine Heaven Benchmark 4.0 MSI TF GTX660
Outros OpenGL e DirectX, visualmente deslumbrantes:
Unigine “Heaven” DX11 benchmark

8. Jogos Linux com renderização de imagens deslumbrantes
Steam

9. Problemas
Tive problemas no uso do xrandr quando trabalhava o seguinte ambiente:

Laptop Toshiba Satellite, com controladora VGA Intel 82852/855GM.
Linux distribuição Debian (Debian 8 – geany)
Ambiente de trabalho gráfico Xfce (versão 4.10), com gerenciador de janelas Xfwm4 ( que é o window manager padrão do Xfxce)
Xrandr versão 1.4.2 (server RandR versão 1.4)

Descrição do problema:
Desejava trabalhar com múltiplos displays (o próprio do laptop e mais outro através de sua saída VGA). E o xrandr se destina exatamente para controlar múltiplos monitores, mas infelizmente não estava funcionando bem. As situações:
a) quando iniciava a máquina com o segundo monitor já conectado na interface VGA do laptop, toda a tela era direcionada ao segundo monitor ficando a tela do laptop apagada. E não havia forma de ativar esta tela (seja através do uso de comando CLI xrandr ou de configurações disponíveis através do ambiente gráfico Xfce). Mesmo desconectando o segundo monitor, a tela do laptop não voltava.

b) iniciando a máquina sem a conexão do segundo monitor, tinha a tela do laptop normalmente. Após conectar o cabo VGA ao segundo monitor, não conseguia ativar o segundo monitor: sua tela ficava sempre escura.

Solução:
Devem existir várias soluções alternaticas para o problema acima, o que é uma característica comum do mundo Linux. O que percebí é que este hardware mais antigo apresenta problemas para trabalhar com dois monitores.


$ xrandr -q
Screen 0: minimum 320 x 200, current 2048 x 768, maximum 2048 x 2048
LVDS1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768      60.00*+
   800x600       60.32    56.25  
   640x480       59.94  
VGA1 connected 1024x768+1024+0 (normal left inverted right x axis y axis) 509mm x 286mm
   1920x1080     60.00 +
   1680x1050     59.95  
   1280x1024     75.02    60.02  
   1440x900      59.89  
   1280x960      60.00  
   1280x720      59.97  
   1024x768      75.08*   70.07    60.00  
   832x624       74.55  
   800x600       72.19    75.00    60.32    56.25  
   640x480       75.00    72.81    66.67    60.00  
   720x400       70.08

Mas ao final tudo funcionou bem, onde fiz os seguintes procedimentos:
a) fazer a iniciação da máquina com o cabo VGA conectado ao segundo monitor. Assim, toda saída de vídeo foi para o segundo monitor ficando a tela do laptop escura;
b) abrir um terminal (utilizando a tela do segundo monitor), e executar os dois comandos a seguir:
$ xrandr --output LVDS1 --off
$ xrandr --output LVDS1 --auto

Neste instante tem-se as duas telas funcionando normalmente (as telas estarão clonadas). Daí por diante os comandos através do xrandr funcionarão normalmente. Um comando interessente neste momento pode ser:
$ xrandr --output VGA1 --mode 1024x768 --right-of LVDS1

Obs: LVDS1 e VGA1 são os nomes das saídas de vídeo na forma como o X enxerga.

10. Dicionário de termos

    • Ambiente Desktop

O termo “ambiente desktop” é uma combinação de facilidades consistindo ícones, janelas, barras de ferramentas, pastas, papéis de parede e desktop widgets. Uma GUI também pode fornecer funcionalidades de arrastar e soltar e outras características que tornam o ambiente desktop mais completo. São exemplos de ambientes desktop GNOME, KDE, Xfce, e LXDE

    • Dispositivo

Uma placa gráfica de computador ou um chipset gráfico integrado numa placa mãe de computador.

    • Monitor

Um dispositivo físico (tal como um CRT ou uma tela plana de computador), semelhante ao que vocês está sentado em frente neste momento.

    • Terminal

Um local de trabalho com um monitor físico, teclado físico e mouse físico.

    • Tela (“screen”)

A tela é algo onde o Xorg pode exibir seu material. A tela tem um monitor e uma placa gráfica que lhe são atribuídos. Telas intercambiáveis ​​são muitas vezes criadas para estarem ficticiamente a esquerda e a direita entre si, chaveando de um para o outro tão logo o ponteiro do mouse atinja a borda do monitor.

    • Tela virtual (“virtual screen”)

Dois significados diferentes estão associados a este termo:
– uma técnica que permite deslizar um monitor em torno de uma tela que está executando numa resolução maior do que o monitor está corrrentemente sendo mostrado;
– um efeito simulado por um “window manager” mantendo a informação da posição da janela em um sistema de coordenadas maior que a tela e permitindo deslizar através da simples movimentação das janelas em resposta ao usuário.

    • “Display”

Uma coleção de telas, muitas vezes envolvendo vários monitores, geralmente configurados para permitir ao mouse apontar para qualquer posição dentro delas. Estações de trabalho baseados em Linux são geralmente capazes de ter múltiplos displays, entre os quais o usuário pode alternar com uma combinação de teclas especiais através do teclado, tais como “control-alt-F1″….”control-alt-F7”, chaveando entre os monitores e mostrando as diversas telas de cada display.

Referências
1- Debian: the X Window System
2- Using Multiple Screens
3- Xorg RandR 1.2
4- XSF / How to use xrandr
5- RandR
6- The X Window System and Virtual Consoles
7- Máquina Debian com ambientes gráficos simultâneos
8- Gerenciadores de login no Debian
9- Placa de vídeo e GPU: principais características
10- Tutorial: How to use the KWin Window Manager with Xfce

Comando TRIM em dispositivos SSD

Publicado: 26/05/2015 em Hardware, Linux
Tags:

1. Introdução
Imagem HD SSDUtilizar o comando fstrim: discarta blocos não utilizados por um sistema de arquivos montado. O que é bastante útil especialmente para drives de estado sólido (SSDs).

Para este post utilizou-se a distribuição Debian, com o disco utilizando partições com sistemas de arquivos ext4, e kernel Linux 3.2.

Basicamente, fstrim busca o lixo deixado para trás pelo sistema de arquivos de modo que quando é hora de escrever novamente para o bloco não tem que tirar o lixo em cada operação. Como a operação de baixo nível de SSDs difere significativamente de unidades de disco rígido de tecnologia magnética, a forma típica em que sistemas operacionais lidam com operações como exclusões e formatações resultam na inesperada degradação progressiva do desempenho de operações de gravação em SSDs. O comando Trim ajuda a manter a unidade de estado sólido (SSD) em sua velocidade máxima, pois ele permite que o SSD possa lidar antecipadamente com o processo de limpeza do lixo, o que, de outra forma, iria abrandar significativamente futuras operações de gravação para os blocos envolvidos.

Para quem não sabe, TRIM é um comando ATA que drives de estado sólido podem tirar vantagem a fim de prolongar o seu desempenho ao longo do seu tempo de uso.

Mas atenção: por padrão, fstrim já vem instalado porém não está automaticamente programado para ser disparado. Outra coisa, o Linux kernel passou a suportar TRIM desde a versão 2.6.33

2. Programas auxiliares úteis
Dois programas poderão ser bastantes úteis para obter informações das unidades de discos instaladas: parted e hdparm.

  • parted: é um programa de manipulação de partições do disco. Ele permite que partições sejam criadas, destruídas, redimensionadas, movidas e cipias (partições ext2, linux-swap, FAT, FAT32, and reiserfs). É útil para criar espaço para novos sistemas operacionais, reorganizando o uso do disco e copiando dados para novos discos rígidos.
  • hdparam: obter/definir paramêtros de dispositivos SATA/IDE.

Instalar os aplicativos:
# apt-get install parted hdparm

3. Verificações iniciais
3.1 Verificar as partições existentes no disco

O comando “parted -l” lista o formato da partição de todos os dispositivos de bloco, como pode ser visto:

# parted -l
  Model: ATA KINGSTON SV300S3 (scsi)
  Disk /dev/sda: 120GB
  Sector size (logical/physical): 512B/512B
  Partition Table: msdos

  Number  Start   End     Size    Type      File system     Flags
   1      1049kB  30,0GB  30,0GB  primary   ext4            boot
   2      30,0GB  33,0GB  2999MB  extended
   5      30,0GB  33,0GB  2999MB  logical   linux-swap(v1)
   3      33,0GB  120GB   87,0GB  primary   ext4

3.2 Verificar se existe um disco SSD instalado
Isto pode ser facilmente verificado de duas maneiras:
a) através comando hdparm

# hdparm -I /dev/sda
  /dev/sda:
  ATA device, with non-removable media
  powers-up in standby; SET FEATURES subcmd spins-up.
	  Model Number:       KINGSTON SV300S37A120G                  
	  Serial Number:      50026B72530B3455    
	  Firmware Revision:  583ABBF0
	  Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
  Configuration:
      .
      .
      .
      Nominal Media Rotation Rate: Solid State Device

Vemos pela resposta do comando acima que existe um HD de estado sólido da marca KINGSTON.

b) Através dos arquivos especiais do Kernel
Se o conteúdo do arquivo /sys/block/sda/queue/rotational for 0, existe um SSD instalado; se for 1, trata-se de um HDD tradicional (magnético). Como se sabe, a pasta /sys armazena informações sobre o hardware (e outras sobre a configuração do sistema).

$ cat /sys/block/sda/queue/rotational
  0

Vemos pela resposta do comando acima que existe um HD de estado sólido instalado, sendo este o primeiro disco SCSI da máquina (arquivo de dispositivo sda).

3.3 Verificar se o drive suporta TRIM
Mesmo existindo um SSD na máquina, nem todos eles suportam o TRIM. Para saber se o SSD suporta TRIM deve-se executar os seguintes comandos (considerando que o drive SSD está em sda):

# hdparm -I /dev/sda | grep -i “TRIM supported”

Se a resposta ao último comando acima for do tipo:

	   *	Data Set Management TRIM supported

então conclui-se que o drive suporta o comando TRIM. Se não houver nenhuma saída, isso significa que o SSD não suporta TRIM.

4. Utilizar comandos TRIM
Exemplos de comandos:
# fstrim -v /
# fstrim -v /home
# fstrim -v -m 4194304 /

O que ocasionará saídas do tipo….
/: 61149098 bytes were trimmed
Neste caso, isto significa que 61.1 MiB foram processados pelo fstrim. Nota: isto não necessariamentoe significa que 61.1 MiB necessitaram ser limpos (liberados). Isso significa que 61.1 MiB foram examinados e todos os blocos que necessitavam ser liberados foram liberados.

Referências:
1- Linux SSD TRIM Setup
2- Using fstrim to “TRIM” your SSD instead of “delete” in fstab

1. Introdução
Esse post foi originalmente testando em uma máquina 64bits com sistema operacional GNU/Linux, utilizando a distribuição Debian 7 (wheezy). Modelo da máquina: LG R590.

1.1 Bluetooth
Logo do bluetoothO Bluetooth: é um padrão aberto de comunicação sem fios para curtas distâncias, baseando-se num modo de funcionamento mestre/escravo. Utiliza a faixa de frequência centrada em 2.45MHz (nos EUA a faixa varia de 2400 a 2483,5 MHz; no Japão varia de 2400 a 2500 MHz), que é chamada de ISM (ISM – Industrial, Scientific, Medical), reservada por acordo internacional para o uso em dispositivos industriais, científicos e médicos. O Bluetooth tem como principal objetivo substituir os cabos, permitindo que celulares, palmtops, mouses, headsets, entre outros, troquem dados entre sí e com o computador, sem precisar de cabos. A velocidade de transmissão no Bluetooth é baixa, alcançando na versão Bluetooth 3.0 (lançada em abril de 2009) o máximo de 24Mbps. Seu alcance é de 10 metros (para os Bluetooth classe 2, o mais comum entre os dispositivos móveis) e 100 metros (para os de classe 1, utilizado industrialmente), em função principalmente da baixa potência do sinal. Para os Bluetooth classe 2, por exemplo, a potência é de cerca de 2,5 miliwatt (muito pequena comparada aos celulares mais potentes que podem transmitir um sinal de 3 watts).

O Bluetooth ainda é uma tecnologia relativamente nova e em grande crescimento. Para se ter uma idéia, vejamos uma pequena linha do tempo com relação ao surgimento de suas primeiras aplicações:
– 2000 – Primeiro celular
– 2001 – Primeiro laptop
– 2002 – Primeira câmera digital
– 2003 – Primeiro mp3-player
– 2004 – Primeiro fone de ouvidos estéreo
– 2006 – Primeiro relógio
– 2007 – Primeira televisão

Comunicação com salto de frequência
Wireless towerUm device Bluetooth “master” pode se comunicar com até sete outros devices, e sem ocorrer interferências entre eles. Isso é devido ao padrão Bluetooth utilizar uma técnica chamada salto de frequência de espalhamento espectral (FHSS – Frequency Hopping Spread Spectrum), que praticamente impossibilita que mais de um dispositivo transmita na mesma frequência ao mesmo tempo. O FHSS é um método de transmitir sinais de rádio chaveando rapidamente uma portadora entre muitos canais de frequência, utilizando-se uma pseudorandomica sequência conhecida tanto pelo transmissor quanto pelo receptor. Essa técnica consiste em recortar a banda de frequência (2.402 – 2.485 GHz) em 79 canais (chamados hops ou saltos) de uma largura de 1MHz cada um. Assim, um dispositivo utiliza em cada instante uma destas 79 freqüências individuais escolhidas aleatoriamente, mudando de uma para outra com regularidade. No caso do bluetooth, os transmissores alteram as freqüências 1.600 vezes por segundo, o que significa que muitos dispositivos podem utilizar totalmente uma fatia limitada do espectro de rádio. Ou seja, a transmissão é alternada entre slots para transmitir e slots para receber, onde estes slots são canais divididos em períodos de 625 µs (microssegundos). Cada salto de frequência é ocupado por um slot, fazendo com que se obtenha os 1.600 saltos em 1 segundo.

Ilustração FHSS
Como todos os transmissores bluetooth usam automaticamente a transmissão de espalhamento espectral, é improvável que dois transmissores compartilhem a mesma frequência simultaneamente (a probabilidade de interferência com outro sistema Bluetooth é menor que 1.5%). Na verdade, qualquer interferência em uma freqüência particular durará somente uma fração de segundo. Mesmo assim, o sistema é inteligente suficiente para perceber que se um dos canais estiver com interferência, a Piconet retira o canal da lista dos possíveis canais do FHSS.

Princípio de comunicação
Os sistemas bluetooth criam uma rede de área pessoal (PAN – Personal Area Network), ou Piconet. Uma Piconet é uma rede de computadores a qual interliga um grupo de dispositivos sem fio utilizando protocolos de tecnologia Bluetooth. O grupo de dispositivos pode ser de até oito dispositivos (1 “mestre” e 7 “escravos”) ocupando o mesmo canal físico (sincronizado com um relógio comum e uma sequência de salto). Uma Piconet inicia com com dois dispositivos conectados, e pode crescer até oito dispositivos conectados. Assim que uma Piconet é estabelecida, os dispositivos saltam entre as frequências através de uma sequência pseudo-aleatória, em uníssono, permanecendo em contato uns com os outros. Após um dispositivo Bluetooth ter sido adicionado a uma Piconet, cada dispositivo é atribuído a um período de tempo específico para transmitir (slot de tempo) e eles não colidem ou se sobrepõem dentro da mesma Piconet. Cada dispositivo bluetooth pode fazer parte de várias “Piconets” ao mesmo tempo, transmitindo e recebendo dados. Isto significa que as possibilidades de conexão entre dispositivos é quase ilimitada.

Bluetooth mestre e escravo

Exemplos de topologias de redes Bluetooth Piconet mestre/escravo.

O Bluetooth permite o envio de dados ponto-a-ponto, envolvendo duas unidades Bluetooth apenas, ou ponto-a-multiponto, envolvendo mais de duas unidades.

Um dispositivo que deseja se conectar a uma Piconet já existente pode emitir um sinal denominado Inquiry. Os dispositivos que recebem o sinal respondem com um pacote FHS (Frequency Hopping Synchronization), informando a sua identificação e os dados de sincronização da Piconet. Com base nestas informações, o dispositivo pode então emitir um sinal chamado Page para estabelecer uma conexão com outro dispositivo.

Dentro de um mesmo espaço físico podem existir várias Piconet. Cada Piconet salta de frequência aleatoriamente através das frequências disponíveis, de modo que todas as Piconets são completamente separadas umas das outras. Dentro de cada uma das redes, seus dispositivos conhecem os endereços dos transmissores que devem ouvir e os endereços dos receptores com quem devem falar. Como cada rede altera sua freqüência de operação milhares de vezes por segundo, é improvável que duas redes quaisquer compartilhem a mesma frequência simultaneamente. Caso isso ocorra, a interferência resultante durará apenas uma fração de segundo e o software concebido para corrigir tais erros descartará as informações conflitantes e prosseguirá com a atividade da rede.

Configurando a conexão
Cada dispositivo é dotado de um número único de 48 bits que serve de identificação, no formato 00:00:00:00:00:00. Esses número é denominado “Endereço de Bluetooth” (Bluetooth Address) e são únicos e exclusivos para cada dispositivo fabricado, assim como o endereço MAC das placas de rede. Esta identificação é comumente abreviada como BD_ADDR. Os endereços geralmente não são mostrados na interface gráfica do usuário, e no seu lugar aparecerá o nome corriqueiro (legível) do dispositivo, que pode ser configurado pelo proprietário. Esse nome aparecerá na lista de dispositivos disponíveis de qualquer aparelho que efetuar uma varredura.

Qualquer dispositivo Bluetooth irá transmitir os seguintes pacotes de informações por demanda:

  • Nome do dispositivo
  • Classe do dispositivo
  • Lista de serviços disponíveis
  • Informações técnicas, como por exemplo, características, fabricante, especificação Bluetooth e configuração de clock.

Qualquer dispositivo pode realizar uma varredura para encontrar outros dispositivos disponíveis para conexão, e qualquer dispositivo pode ser configurado para responder ou não a essas requisições. O uso dos dispositivos requer pareamento (conhecido também como “emparelhamento”) ou aceitação da conexão pelo proprietário. Alguns dispositivos podem se conectar apenas com um dispositivo por vez, e a conexão a esses dispositivos impede que eles possam receber requisições de outros ou que fiquem visíveis para outros aparelhos que estiverem realizando varredura.

Vinculação e Pareamento

Quando dois dispositivos Bluetooth partilham uma afinidade especial pelo outro, eles podem ser vinculados entre si. Dispositivos vinculados estabelecem automaticamente uma conexão sempre que estiverem perto o suficiente. Por exemplo, o Bluetooth do celular imediatamente se conecta ao sistema de Bluetooth do automóvel porque eles compartilham um vínculo. Nenhuma interação do usuário é requerida!

Vínculos são criados através de um procedimento realizado uma única vez, procedimento esse chamado de pareamento (ou emparelhamento). Quando os dispositivos alcançam o pareamento, eles compartilham seus endereços, nomes e perfis, e, geralmente, os armazena em memória não volátil para não perder estas informações. Também compartilham uma chave secreta comum, o que lhes permite a vinculação sempre que eles estiverem juntos no futuro.

O pareamento geralmente requer um processo de autenticação, onde os usuários devem validar a conexão entre os dispositivos através de uma senha secreta (passkey). O dispositivo que deseja se comunicar com um outro dispositivo deve informar uma senha que também deve ser digitada no outro dispositivo. O fluxo do processo de autenticação varia e geralmente depende da capacidade da interface dos dispositivos. Algumas vezes o pareamento envolve combinar códigos numéricos de 6 dígitos. Já em versões legadas do Bluetooth (v2.0 e anteriores), o processo de pareamento envolve digitar um código comum em cada dispositivo, o “PIN code”. O “PIN code” pode variar em tamanho e complexidade desde quatro números (por exemplo “0000” or “1234”), até uma cadeia de 16 caracteres alfanuméricos.

Depois de parear, os dispositivos guardam a identificação destes pareamentos e se conectam de forma automática todas as próximas vezes. Como o endereço Bluetooth é permanente, o pareamento é preservado, mesmo se o nome de algum dos dispositivos for trocado. Pareamentos podem ser apagados (e assim ter as autorizações de conexão removidas) a qualquer momento. A grande maioria dos dispositivos exigem pareamento antes de permitir o uso dos seus serviços pela primeira vez (como se fosse uma regra geral).

O processo de pareamento do Bluetooth é assim resumido:

  • Dispositivo Bluetooth procura outros dispositivos Bluetooth: para ser detectado por outros dispositivos Bluetooth, o primeiro dispositivo, dispositivo 1 deve ser ajustado para o modo detectável – o que permitirá que outros dispositivos Bluetooth na vizinhança detectem a sua presença e tentwm estabelecer uma conexão.
  • Dois dispositivos Bluetooth encontram um ao outro: quando os dois dispositivos, o dispositivo 1 e o dispositivo 2 encontram um ao outro, é possível detectar o que eles são. Normalmente, o dispositivo detectável vai indicar que tipo de dispositivo ele é – celular, fone de ouvido, etc., juntamente com o seu “Bluetooth device name”. Esse nome pode ser previamente atribuído pelo usuário, ou ele será aquele atribuído durante a sua fabricação.
  • Solicitar Senha: muitas vezes a senha padrão é definido como “0000”, mas é aconselhável a utilização de uma outra em razão de segurança.

No entanto, muitos aparelhos mais sofisticados – smartphones e computadores – ambos os usuários devem concordar com um código o qual deve obviamente ser o mesmo para ambos.

  • Dispositivo 1 envia chave de acesso (passkey): o dispositivo de inicialização, dispositivo 1 envia a senha (passkey) que foi inserida para o Dispositivo 2.
  • Dispositivo 2 envia chave de acesso (passkey): o dispositivo 2 envia a mesma senha para o dispositivo 1, que por sua vez verifica se elas coincidem. Havendo a coincidência, um par de devices confiáveis é formado, ou seja, o pareamento Bluetooth está estabelecido.
  • A comunicação é estabelecida: uma vez que o pareamento Bluetooth tenha ocorrido, dados podem ser trocados entre os dispositivos.

Uma vez que o pareamento Bluetooth tenha sido estabelecido, ele será lembrado pelos dispositivos, que poderão voltar a se conectar no futuro sem intervenção do usuário. Se necessário, a relação de pareamento Bluetooth poderá ser removido pelo usuário em um momento mais tarde, se requerido.

Suporte do Linux ao Bluetooth
O Linux tem suporte nativo a Bluetooth desde a versão do kernel 2.4.6.

1.2 USB
Logo da USBUniversal Serial Bus (USB): é um padrão da indústria desenvolvido em meados da década de 1990 que define os cabos, conectores e protocolos de comunicação utilizados em um barramento para a conexão, comunicação e fornecimento de energia entre computadores e dispositivos eletrônicos. USB foi projetado para padronizar a conexão entre periféricos (incluindo teclados, dispositivos apontadores, câmeras digitais, impressoras, leitores multimédia portáteis, unidades de disco e adaptadores de rede) e computadores pessoais, tanto para se comunicar como para o fornecimento de energia elétrica. Tornou-se lugar-comum em outros dispositivos, como smartphones, PDAs e consoles de videogame. USB tem vindo a substituir uma variedade de interfaces anteriores, como portas seriais e paralelas, bem como carregadores de alimentação externos para dispositivos portáteis.

2. Identificando se existe interface bluetooth na máquina
Em equipamentos tipo notebooks, normalmente a interface bluetooth está conectada ao barramento usb. O mais prático é utilizar o comando lsusb, que é um utilitário para mostrar as informações dos barramentos USB existentes na máquina e os dispositivos conectados a ele.

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 18e8:6252 Qcom
Bus 002 Device 006: ID 1a2c:0002
Bus 002 Device 004: ID 1c4f:0003 SiGma Micro HID controller
Bus 002 Device 005: ID 0408:1321 Quanta Computer, Inc.

Pela resposta acima, ainda não é possível identificar se existe um dispositivo bluetooth na máquina. Vamos tentar obter algo um pouco mais detalhado e legível, usar o comando lsusb da seguinte maneira:
$ lsusb -v | grep -E '\<(Bus|iProduct|bDeviceClass|bDeviceProtocol)' 2>/dev/null
Bus 001 Device 003: ID 18e8:6252 Qcom
bDeviceClass 224 Wireless
bDeviceProtocol 1 Bluetooth
iProduct 2
(Bus Powered)

Agora sim, identificamos então que a máquina possui um device bluetooth, com referência 18e8:6252. Onde se tem:
18e8 = vendorID: Qualcom (como pode ser visto através do The USB ID Repository)
6252 = deviceID

Obs: para um entendimento mais detalhado destes pares de referência a dispositivos, ler o post “Entendendo os drivers Linux para arquitetura de barramento PCI“.

3. Pacotes a serem instalados
Pacotes principais

  • bluez: ferramentas e daemons do sistema para usar com dispositivos bluetooth.
  • gnome-bluetooth: disponibiliza ferramentas para gerir e manipular dispositivos bluetooth especialmente para o ambiente de trabalho GNOME e Xfce. A motivação principal para escolha deste pacote (em vez do pacote bluetooth) foi em função de se ter o ícone do bluetooth no gerenciador gráfico (“Desktop Environment”), tanto para o GNOME como para o Xfce. Este pacote faz a disponibilização das seguintes ferramentas:

    • /usr/bin/bluetooth-applet : disponibiliza o ícone do bluetooth (com acesso as funções do bluetooth e avisar ao usuário para uma chave de acesso – PIN – ao bluetooth) no gerenicador gráfico Xfce ou Gnome.
    • /usr/bin/bluetooth-sendto : envia arquivos para um “device” remoto (os dispositivos têm que estar pareados para isto).
    • /usr/bin/bluetooth-wizard : procura por novos “devices” para serem pareados.

Pacotes complementares

  • blueman: Graphical bluetooth manager. Mas só se for desejável pelo usuário uma interface gráfica. No Xfce sua entrada aparecerá nem Menu de Aplicativos –> Configurações –> Gerenciador Bluetooth
  • bluetooth: pacote de suporte ao bluetooth (não necessário se pacote gnome-bluetooth for instalado).

Para verificar quais pacotes estão instalados
Para verficiar quais pacotes estão instalados, usar o comando apt-cache. Por exemplo:
$ apt-cache policy gnome-bluetooth

4. Configurações
Arquivos de configurações estão na pasta /etc/bluetooth/

5. Comandos básicos via terminal
a) Parar, iniciar e reiniciar o Blootooth
$ /etc/init.d/bluetooth restart | start | stop

b) Verificar se o bluetooth está em execução normal
$ /etc/init.d/bluetooth status
[ ok ] bluetooth is running

c) Comandos via hciconfig
O aplicativo hciconfig é utilizado para configurar “Bluetooth devices” (celulares, mouses…).
hciX (exemplos: hci0; hci1) é o nome de um “Bluetooth device” instalado no sistema. Para uma lista completa de comandos possíveis com o hciconfig use o help que está disponível: "hciconfig -h“.

Para verificar se o adaptador Bluetooth foi detectado corretamente, utilize o seguinte comando

$ /usr/sbin/hciconfig
hci0:	Type: BR/EDR  Bus: USB
	BD Address: 00:0D:F0:81:FA:89  ACL MTU: 1021:7  SCO MTU: 64:1
	UP RUNNING PSCAN 
	RX bytes:74443 acl:418 sco:0 events:1121 errors:0
	TX bytes:281441 acl:667 sco:0 commands:345 errors:0

Vemos pela resposta ao comando que o nome do dispositivo local onde o adaptador bluetooth foi instalado é hci0, vemos que o Bluetooth está ativo (UP RUNNING) e é mostrada a identificação de seu Bluetooth Address (“BD Address”). Caso o bluetooth estivesse parado a indicação seria DOWN.

Para informações mais completa, podemos usar o seguinte comando alternativo:

$ /usr/sbin/hciconfig -a
hci0:	Type: BR/EDR  Bus: USB
	BD Address: 00:0D:F0:81:FA:89  ACL MTU: 1021:7  SCO MTU: 64:1
	UP RUNNING PSCAN ISCAN 
	RX bytes:45471 acl:25 sco:0 events:353 errors:0
	TX bytes:1881 acl:25 sco:0 commands:118 errors:0
	Features: 0xff 0xff 0x8f 0xfe 0x9b 0xff 0x79 0x83
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH HOLD SNIFF PARK 
	Link mode: SLAVE ACCEPT 
	Name: 'maracatu-0'
	Class: 0x420100
	Service Classes: Networking, Telephony
	Device Class: Computer, Uncategorized
	HCI Version: 2.1 (0x4)  Revision: 0x542a
	LMP Version: 2.1 (0x4)  Subversion: 0x420e
	Manufacturer: Broadcom Corporation (15)

Para Ativar o o adaptador Blootooth:
# hciconfig hci0 up

Para escanear dispositivos blootooth existentes

$ hcitool scan
  Scanning ...
	  2C:54:CF:00:8B:1B	  device-1
	  05:36:6B:40:33:12       device-2


Foram detectados dois devices remotos (por exemplo, poderia ter sido um celular e um mouse), e seus BD Address estão mostrados.

6. Logs
Para acompanhar os logs do bluetooth dois bons comandos são:
# tail -f /var/log/syslog
# grep blue /var/log/syslog|more

7. Usando o Xfce
a) Mostrar o ícone do Bluetooth na barra do Gnome ou do Xfce (caso ainda não esteja visível):
$ bluetooth-applet &

Outros comandos:
bluetooth-wizard é parte do pacote “bluez”. Irá exibir um assistente para configurar dispositivos Bluetooth.
$ bluetooth-wizard

b) Mostrar automaticamente o ícone do bluetooth toda vez que o gerenciador gráfico (“Desktop Environment”) Xfce for iniciado:
Configurações -> Sessão e Inicialização -> Inicio automático de aplicativo e marcar "Gerenciador Bluetooth".

8. Apagar as chaves de encriptação
As chaves de encriptação dos dispositivos que já efetuaram pareamento com o computador ficam armazenados no histórico do sistema, armazenadas na pasta “/var/lib/bluetooth“. Isso evita a necessidade de um novo processo de pareamento com estes aparelhos já pareados anteriormente. Limpando a pasta, apaga-se toda a memória de pareamentos anteriores:

# rm -r /var/lib/bluetooth/*
# /etc/init.d/bluetooth restart

9. Transferir arquivo para um outro dispositivo via linha de comando
Após parear os dispositivos, é só identificar o BD Address do destino e fazer:
$ bluetooth-sendto --device=2C:54:CF:00:8B:1B pasta/meu_arquivo.jpg
Para identificar o BD Address do dispositivo pareado pode-se utilizar o comando “hcitool scan” conforme explicado anteriormente.

Referências:
1- Funcionamento do bluetooth
2- Bluetooth
3- Como conectar fones bluetooth no Debian por linha de comando
4- Bluetooth no Linux, Guia do Hardware
5- Using Bluetooth in a Debian system
6- Bluetooth: Pairing and bonding
7- Table of USB device supported by debian
8- List of USB ID’s
9- Bluetooth: transferring and receiving files under Ubuntu
10- Pareando o Ubuntu com um celular usando o bluetooth

Este post descreve a instalação do driver para o controlador wireless do netbook Acer Aspire One Series.
Sistema Operacional: GNU/linux, Debian 6 (Squeeze)

Neste equipamento a interface wireless está em eth1.

1) Identificar o hardware wireless
$ lspci -nn | grep Network
01:00.0 Network controller [0280]: Broadcom Corporation BCM4312 802.11b/g LP-PHY [14e4:4315] (rev 01)

Interpretando:
vendor 0x14E4: Broadcom
Devide 0x4315: BCM4315/BCM22062000 Broadcom Wireless b/g

2) Identificar o driver

A Broadcam tem um driver Linux para esta placa em: http://www.broadcom.com/support/802.11/linux_sta.php
Este pacote contém device driver Broadcom’s IEEE 802.11a/b/g/n hybrid Linux® para uso com os hardwares Broadcom’s BCM4311-, BCM4312-, BCM4313-, BCM4321-, BCM4322-, BCM43224-, and BCM43225-, BCM43227- and BCM43228-based.

3) Baixar o driver e compilar

3.1) Baixar o driver (no caso, o pacote para 32bits)

minhapasta$ wget -c http://www.broadcom.com/docs/linux_sta/hybrid-portsrc_x86_32-v5_100_82_112.tar.gz

3.2) Desempacotar (no caso, o pacote de 32bits baixado)
minhapasta$ tar -vzxf hybrid-portsrc_x86_32-v5_100_82_112.tar.gz

O arquivo README que está disponível na URL do driver deve ser lido, pois trata-se um tutorial para instalação do driver.

3.3) Headers do Kernel
Se ainda não estiver com os arquivos de headers do kernel instalados, faça-o agora:
# apt-get install build-essential linux-headers-$(uname -r)

3.4) Compilador C
Se ainda não estiver com o compilador C instalado, faça-o agora:
# apt-get install gcc

3.5) Compilar o driver como um “Linux loadable kernel module” (LKM)
minhapasta# make clean
minhapasta# make

Quando a compilação estiver completa, será produzido um arquivo wl.ko
Este driver agora suporta a nova API linux de configuração sem fio cfg80211 em substituição da extensão anterior mais velhos sem fio (wext). O “makefile” automaticamente irá construir a versão correta para o sistema, mas ele pode ser
substituído se necessário:

# make API=WEXT
ou ainda
# make API=CFG80211

4) Instalar driver
4.1) Remover qualquer outro driver instalado para o Broadcom wireless device.
Existem vários outros drivers (além deste baixado) que podem controlar o Broadcom 802.11 tais como b43, BCMA e SSB. Para visualizar os drivers instalados:
# lsmod | grep "b43\|ssb\|bcma\|wl"

Se algum deste estiver instalado, remova-os:
# rmmod b43
# rmmod ssb
# rmmod bcma
# rmmod wl
# rmmod ndiswrapper

Colocar estes drivers na “blacklist” para prevenirque sejam carregados no futuro:
# echo "blacklist ssb" >> /etc/modprobe.d/blacklist.conf
# echo "blacklist bcma" >> /etc/modprobe.d/blacklist.conf
# echo "blacklist b43" >> /etc/modprobe.d/blacklist.conf

4.2) Remover uma (possível) versão do “wl” já instalado anteriormente
Se já existia uma versão anterior do wl, basta fazer o procedimento deste subitem desconsiderando os demais passos descritos neste item “Instalar”. Considerando uma versão do “wl” instalada, é necessário fazer uma transição limpa do driver mais antigo para o novo driver. O caminho para o driver anterior é normalmente /lib/modules/<kernel-version>/kernel/net/wireless. Quando da publicação deste post, o caminho era /lib/modules/2.6.32-5-686/kernel/net/wireless/

minhapasta# rmmod wl
minhapasta# mv /lib/modules/<kernel-version>/kernel/net/wireless/wl.ko /lib/modules/<kernel-version>/kernel/net/wireless/wl.ko.orig
minhapasta# cp wl.ko /lib/modules//kernel/net/wireless/wl.ko
minhapasta# depmod
minhapasta# modprobe wl

O novo driver “wl” deve estar agora operacional e está tudo feito. Não há necessidade de fazer os passos descritos nos itens 4.3 à 4.7 abaixo.

4.3) Módulo de segurança de criptografia
Caso não tenha ocorrido uma instalado de um driver “wl” anteriormente, será necessário adicionar um módulo de segurança antes da utilização deste módulo “wl”. De uma maneira geral, os sistemas atuais usam o “lib80211”.
# modprobe lib80211

4.4) Carregar módulo de API cfg80211
# modprobe cfg80211

4.5) Carregar driver
# insmod wl.ko

O novo driver “wl” deve estar agora operacional e está tudo feito. Pode demorar alguns segundos para o “Network Manager” perceber que um novo driver de rede foi instalado e poder mostrar as redes wireless disponíveis.

4.6) Back up o corrente boot ramfs e gerar um novo
minhapasta# cp /boot/initrd.img-`uname -r` somewheresafe
minhapasta# update-initramfs -u
minhapasta# reboot

4.7) Diretório de módulos do kernel
Copiar o módulo gerado para o diretório de módulos do kernel e criar as dependências:

minhapasta# cp wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless
minhapasta# depmod -a

5) Conectando em Redes Sem Fio no Linux
Esta parte do tutorial é referente a como fazer a conexão em redes sem fio que utilizem ou não proteção (WEP e WPA), tudo por linha de comando no GNU/Linux.

5.1) Parar o gerenciador de rede
Deve-se parar o processo do gerenciador de rede caso este esteja sendo utilizando. Por exemplo, os gerenciadores de rede “Network Manager” ou “Wicd”. Aproveitaremos para mostrar sua desativação completa para que não seja mais iniciado durante o boot:

# /etc/init.d/network-manager stop
# update-rc.d -f network-manager remove

5.2) Habilitar a interface de rede
# ifconfig eth1 up

5.3) Rede Aberta
Para conectar quando é uma rede aberta, ou seja, sem nenhuma criptografia, basta o seguinte comando:
# iwconfig eth1 essid WIFI

5.4) Rede com Criptografia WEP
Se a rede tiver criptografia WEP, para conectar execute o seguinte comando:
# iwconfig eth1 essid WIFI key SENHA

5.5) Rede com Criptografia WAP
Mas se a rede estiver com criptografia WPA, conforme foi mostrado no escaneamento de rede, para conectar execute os seguintes comandos:
# wpa_passphrase WIFI SENHA > /etc/wpa_supplicant/wpa_supplicant.conf
# wpa_supplicant -i eth1 -c /etc/wpa_supplicant/wpa_supplicant.conf -B -D wext

5.6) Finalmente solicitar o IP para navegação
# dhclient wlan0

Links:
1- Broadcom BCM4312 com driver nativo do Linux
2- Conectando em Redes Sem Fio no Linux