Nas versões anteriores à 1.4, para gerenciar a tela do monitor e o teclado podia-se escolher entre pccons (específico para i386) e pcvt. Na versão 1.4 foi introduzido o novo driver wscons que, com o tempo, destinava-se a substituir completamente os dois primeiros.
wscons é o novo driver de console do NetBSD que deveria substituir pccons e pcvt. Oferece terminais virtuais, suporte para teclados internacionais, gerenciamento do mouse, etc. As capacidades do wscons alteram-se segundo a arquitetura. O i386 é o mais rico de funcionalidade.
wscons é ativado por default ao término da instalação e, portanto, não é necessário fazer nada para poder utilizá-lo. Para habilitar os consoles virtuais ver Capítulo 4. No resto da seção serão descritas as opções do arquivo de configuração do kernel que dizem respeito ao wscons.
Para habilitar wscons no arquivo de configuração do kernel é necessário ativar a opção adequada e desabilitar aquelas que dizem respeito ao pcvt e ao pcccons. (Atenção, somente um dos três drivers deve ser habilitado).
#pc0 at isa? port 0x60 irq 1 # pccons generic PC console driver #vt0 at isa? port 0x60 irq 1 # PCVT console driver
Para habilitar o teclado italiano
options PCKBD_LAYOUT="KB_IT"
A disposição do teclado italiano não é a ideal, em especial para os programadores. Para uma modificação ver Capítulo 4.
O número de consoles virtuais alocados automaticamente é controlado por
options WSDISPLAY_DEFAULTSCREENS=4
Os consoles adicionais, isto é, aqueles a mais com relação aos consoles auto-alocados, são habilitados no arquivo /etc/wscons.conf, tirando-se os indicadores de cometário (#) nas linhas do tipo "screen x". No exemplo seguinte é reservado um console adicional em relação aos alocados de modo automático.
# screens to create # idx screen emul #screen 0 - vt100 screen 1 - vt100 screen 2 - vt100 screen 3 - vt100 screen 4 - - #screen 4 80x25bf vt100 #screen 5 80x50 vt100
O script rc.wscons transforma cada linha não comentada desta tabela em uma chamada ao comando wsconscfg. As colunas tornam-se parâmetros do próprio comando. A coluna idx torna-se o parâmetro index; a coluna screen torna-se o parâmetro -t type (que define o tipo de tela, ou seja, o formato, o número de cores, etc.) e a coluna emul torna-se o parâmetro -e emul (que define a emulação). Por exemplo, se "screen 3" estivesse ativo, tornar-se-ia uma chamada a:
wsconscfg -e vt100 3
Nota: note-se que pode ocorrer um conflito (inócuo) entre consoles alocados automaticamente pelo kernel e os consoles alocados no momento da inicialização através do /etc/wscons.conf. Se na inicialização tenta-se alocar uma tela já auto-alocada pelo kernel, será visualizada uma mensagem do tipo:
wsconscfg: WSDISPLAYIO_ADDSCREEN: Device busyA solução consiste em se comentar as linhas inúteis do /etc/wscons.conf.
Os consoles criados são naturalmente também ativados em /etc/ttys. Por exemplo:
console "/usr/libexec/getty Pc" pc3 off secure ttyE0 "/usr/libexec/getty Pc" vt220 on secure ttyE1 "/usr/libexec/getty Pc" vt220 on secure ttyE2 "/usr/libexec/getty Pc" vt220 on secure ttyE3 "/usr/libexec/getty Pc" vt220 off secure ...
A linha
ttyE3 "/usr/libexec/getty Pc" vt220 off secure
do /etc/ttys permite ao servidor X encontrar um terminal livre. Para usar uma tela diferente da número 4 é necessário fazer de tal modo que se passe um parâmetro na forma vtn ao servidor X (onde n é o número da tecla de função associada à tela a ser reservada para a interface gráfica).
Pode-se, por exemplo, habilitar a "screen 7" no /etc/wscons.conf e depois inicializar o X com "vt8". No caso do xdm é necessário editar o /usr/X11R6/lib/X11/xdm/Xserver. Por exemplo:
:0 local /usr/X11R6/bin/X +kb dpms -bpp 16 dpms vt8
Se, no entanto, é usado o xdm3d, o percurso é diferente: /usr/X11R6/share/xdm3d/Xservers.
Nota: no wscons a combinação Ctrl+Alt+Backspace reseta o emulador do terminal. Pode ser útil em caso de problemas.
A modalidade de texto em 50 linhas pode ser utilizada a partir da versão 1.4.1 do NetBSD. Para ativar esta modalidade, além das operações precedentemente descritas, é necessário editar o /etc/wscons.conf, tirando o comentário da linha:
font ibm - 8 ibm /usr/share/pcvt/fonts/vt220l.808
No fim do arquivo, modificar as linhas do seguinte modo:
#screen 0 80x50 vt100 screen 1 80x50 vt100 screen 2 80x50 vt100 screen 3 80x50 vt100 screen 4 80x50 vt100 screen 5 80x50 vt100 screen 6 80x50 vt100 screen 7 80x50 vt100
Deste modo obtém-se oito telas, às quais se acessa com a combinação Ctrl+Alt+Fn (sendo que n vai de 1 a 8). Os dispositivos correspondentes são os que vão de ttyE0 a ttyE7. Para habilitá-los e ter um prompt de login, modificar o /etc/ttys:
ttyE0 "/usr/libexec/getty Pc" vt220 on secure ttyE1 "/usr/libexec/getty Pc" vt220 on secure ttyE2 "/usr/libexec/getty Pc" vt220 on secure ttyE3 "/usr/libexec/getty Pc" vt220 on secure ttyE4 "/usr/libexec/getty Pc" vt220 on secure ttyE5 "/usr/libexec/getty Pc" vt220 on secure ttyE6 "/usr/libexec/getty Pc" vt220 on secure ttyE7 "/usr/libexec/getty Pc" vt220 on secure
Ao que parece, não é possível modificar a definição de 80x25 da tela 0, provavelmente para evitar, em caso de problemas, que se perca a única tela de console que está funcionando.
Pccons é o driver de console utilizado pelos disquetes de instalação da versão de hardware i386 (e talvez também de outras arquiteturas). Trata-se de um driver muito compacto (exige pouco espaço), mas que não dispõe de consoles virtuais ou de outras características avançadas.
pcvt é um emulador de terminal VT220 e é dotado de funcionalidade muito mais avançada se o comparamos com o simples pccons. Entre outras coisas, suporta mais configurações de teclado e consoles virtuais múltiplos (com Ctrl+Alt+F1...F8 ou com as teclas de função F9-F12). Para ativar o pcvt é necessário recompilar o kernel. É preciso que se tenha as seguintes linhas no próprio arquivo de configuração:
# Ativar somente uma das duas linhas seguintes #pc0 at isa? port 0x60 irq 1 vt0 at isa? port 0x60 irq 1 # Options for PCVT console driver #options FAT_CURSOR options PCVT_NETBSD=132 options PCVT_NSCREENS=3
Ademais, é necessário ativar o teclado italiano na inicialização e escolher o tipo certo de terminal:
/usr/local/bin/kcon -m i2 TERM=pcvt25; export TERM
Simultaneamente é necessário modificar o /etc/ttys. Por exemplo:
#console "/usr/libexec/getty Pc" pcvt25 on secure ttyv0 "/usr/libexec/getty Pc" pcvt25 on secure
Nota: Na definição do teclado i2 há um erro. É necessário modificar o arquivo /sys/arch/i386/isa/pcvt/Util/keycap/keycap.src. A versão correta é:
i2|italy142|Italian 142 mapping:\ :A8={:A9=[:A10=]:A11=}:\ :A12=`:A13=~:\ :A17=@:A18=#:\ :tc=italy141:
Na inicialização é necessário carregar as definições para o teclado italiano modificando, por exemplo, o arquivo /etc/rc.local:
KCONP=/usr/local/bin SCONP=/usr/local/bin LDFNP=/usr/local/bin ISPCP=/usr/sbin CURSP=/usr/local/bin set_keybd=YES #------------------------------------------------------ # if desired, setup keyboard for italian keyboard layout #------------------------------------------------------ if [ X${set_keybd} = X"YES" -a -x $KCONP/kcon ] then echo echo 'switching to italian keyboard layout' $KCONP/kcon -m i2 fi echo '.'
Além disso, é preciso modificar o /etc/ttys:
#console "/usr/libexec/getty Pc" pcvt25 on secure ttyv0 "/usr/libexec/getty Pc" pcvt25 on secure ttyv1 "/usr/libexec/getty Pc" pcvt25 on secure ttyv2 "/usr/libexec/getty Pc" pcvt25 on secure
É necessário também compilar e instalar os programas utilitários do pcvt.
cd /sys/arch/i386/isa/pcvt/Util make make install
Nota: No caso de erros de compilação, atentar para que no /usr/include/machine esteja presente o arquivo pcvt_ioctl.h.
Com o pcvt é possível alterar o número de linhas e de colunas sobre a tela. O seguinte programa, por exemplo, executa a operação automaticamente, permitindo escolher entre várias configurações:
#!/bin/sh # Set the screen to # lines case $1 in 25) /usr/local/bin/scon -s 25 /usr/local/bin/cursor -s13 -e14 ;; 28) /usr/local/bin/loadfont -c1 -f /usr/share/misc/pcvtfonts/vt220l.814 /usr/local/bin/loadfont -c2 -f /usr/share/misc/pcvtfonts/vt220h.814 /usr/local/bin/scon -s 28 /usr/local/bin/cursor -s12 -e14 ;; 40) /usr/local/bin/loadfont -c3 -f /usr/share/misc/pcvtfonts/vt220l.810 /usr/local/bin/loadfont -c4 -f /usr/share/misc/pcvtfonts/vt220h.810 /usr/local/bin/scon -s 40 /usr/local/bin/cursor -s8 -e10 ;; 50) /usr/local/bin/loadfont -c5 -i /usr/share/misc/pcvtfonts/vt220l.808 /usr/local/bin/loadfont -c6 -i /usr/share/misc/pcvtfonts/vt220h.808 /usr/local/bin/scon -s 50 /usr/local/bin/cursor -s6 -e8 ;; *) echo "Invalid # of lines (25/28/40/50)" ;; esac