Marcado como: linux Ativar/desativar aninhamento de comentários | Atalhos do Teclado

  • Fm4lloc 2:59 am em 22 de August de 2018 Link Permanente | Resposta
    Tags: , , , , linux, , , , , , , , ,   

    Nova beta da Steam Play usa versão modificada do Wine para rodar jogos nativos do Windows no Linux 

    Foi anunciado e disponibilizado hoje a versão beta da Steam Play, capaz de rodar jogos nativos do Windows no Linux através de uma camada de compatibilidade chamada de Proton, um fork do Wine direcionado para trabalhar melhor com jogos da Steam e suporte a api Vulkan.

    “Nosso objetivo com este trabalho é facilitar o acesso dos usuários do Steam para Linux a um catálogo mais abrangente. Acreditamos ainda que isto irá permitir que novos desenvolvedores consigam impulsionar o seu trabalho focando em o Linux. Isto daria a eles a opção de focar em áreas que pudessem realmente fazer uma diferença significativa para todos os usuários, como por exemplo o suporte a Vulkan[www.khronos.org].

    Como um resultado, hoje estamos lançando a versão Beta de uma nova e melhorada versão do Steam Play para todos os usuários do Steam para Linux. Esta versão inclui o Proton, uma versão modificada do Wine que oferece compatibilidade com os títulos dos jogos para Windows. Estas são algumas das melhorias incluídas nesta versão:

    • Jogos do Windows que atualmente não têm versão para Linux poderão agora ser completamente instalados e iniciados diretamente dos clientes Steam para Linux com Steamworks nativo e suporte ao OpenVR.
    • As implementações do DirectX 11 e 12 agora são baseadas em Vulkan, resultando em um jogo com melhor compatibilidade e menor impacto de desempenho.
    • O suporte à tela cheia também foi aperfeiçoado: jogos em tela cheia serão expandidos para a exibição desejada sem interferir com a resolução da tela nativa ou exigindo o uso de uma área de trabalho virtual.
    • Suporte a controle de jogos melhorado: os jogos irão reconhecer todos os controles compatíveis com o Steam. Espere uma compatibilidade de controle mais inovadora do que a da versão original do jogo.
    • O desempenho de jogos multi-segmentados também foi aprimorado ao compará-lo com a versão básica do Wine.”

    (Online, Apresentando a nova versão do Steam Play)

    Qual é a diferença entre ele e a versão do Wine normal e o Proton? Quem trabalhou nele?

    Proton é uma ferramenta baseada em uma versão modificada do Wine. As melhorias do Wine incluídas foram desenvolvidas e financiadas pela Valve em colaboração com a CodeWeavers. Estes são alguns exemplos de como temos trabalhado juntos desde 2016:

    • vkd3d[source.winehq.org], a implementação Direct3D 12 baseada em Vulkan
    • As pontes API nativas OpenVR e Steamworks 
    • Várias soluções de desempenho e funcionalidade de wined3d para Direct3D 9 e Direct3D 11
    • Tela cheia aprimorada e compatibilidade com controles
    • A versão “esync[github.com]” para melhoria de desempenho multi-segmentado

    (Online, Apresentando a nova versão do Steam Play)

    Para ativar a versão beta abra a tela principal da Steam e entre em Exibir > Conta; altere para “Steam Beta Update” e clique em OK.

    steam_beta

    Reinicie o aplicativo, entre agora em Exibir > Configurações; e habilite o “Steam Play” para jogos que ainda não foram verificados como compatíveis, mas que já podem estar funcionando nessa fase beta.

    steam_play_settings

    Lista com jogos já testados por outros usuários:

    LISTA 1: https://docs.google.com/spreadsheets/d/1DcZZQ4HL_Ol969UbXJmFG8TzOHNnHoj8Q1f8DIFe8-8/edit#gid=0
    LISTA 2: https://spcr.netlify.com/
    LISTA 3: https://www.gamingonlinux.com/wiki/Proton_compatibility_list_(Steam_play_Beta)
    LISTA 3: https://github.com/ValveSoftware/Proton/wiki/Community-Compatibility-Reports

    Fonte
    _____
    https://steamcommunity.com/games/221410/announcements/detail/169605585573935051 https://www.gamingonlinux.com/articles/valve-officially-confirm-a-new-version-of-steam-play-which-includes-a-modified-version-of-wine.12400
    https://github.com/ValveSoftware/Proton/

     
  • Fm4lloc 10:32 pm em 20 de July de 2018 Link Permanente | Resposta
    Tags: autocomplete, , deb, , dica, howto, linux, , terminal, , ubuntu   

    Habilitar o Autocomplete do Bash 

    Olá, caros leitores!

    Essa é mais uma dica rápida ensinando como habilitar o autocomplete no terminal, aquele usando a tecla [tab].

    O primeiro passo é reinstalar o pacote bash-completion, para o caso de não existir ou você ter estragado alguma coisa, depois copiar o arquivo /etc/bash.bashrc para home nomeando-o direto para .bashrc

    $ sudo apt-get install --reinstall bash-completion
    $ cp /etc/bash.bashrc ~/.bashrc
    

    Após isso, abra o arquivo ~/.bashrc recém copiado com seu editor de textos favorito e encontre o trecho de código correspondente ao abaixo. Descomente as linhas removendo o caractere # (hashtag), só não faça isso para o comentário explicando o que aquilo faz.

    # enable bash completion in interactive shells
    #if ! shopt -oq posix; then
    #  if [ -f /usr/share/bash-completion/bash_completion ]; then
    #    . /usr/share/bash-completion/bash_completion
    #  elif [ -f /etc/bash_completion ]; then
    #    . /etc/bash_completion
    #  fi
    #fi
    

    O Resultado fica assim:

    # enable bash completion in interactive shells
    if ! shopt -oq posix; then
      if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi

    Agora salve o arquivo. O autocomplete já estará funcionando.

     
  • Fm4lloc 3:37 pm em 11 de October de 2015 Link Permanente | Resposta
    Tags: cdi, dreamcast, , emulator, gdi, linux, reicast, , sega   

    Testando o Reicast – emulador de Sega Dreamcast no Linux 

    Nessa postagem vou explicar como compilar e instalar o emulador Reicast no Linux.

    Reicast não é o primeiro projeto open-source escrito para emular jogos de Dremcast, existe o Lxdream, sem atualização desde 2010. Na linha de código fechado o finado Chankast reinava no Windows em meados 2005. Contudo, nenhum deles permaneceu como referência na cena da emulação.

    A ascensão do Reicast não foi acidental, o projeto nasceu das mãos dos talentosos desenvolvedores do nullDC, considerado o melhor emulador de Sega Dremcast para Windows x86. Inclusive na página do nullDC contém uma nota informando que os novos trabalhos serão feitos no Reicast:

    Work is now done on reicast (https://github.com/reicast/reicast-emulator), and while nullDC is still a better choice for dreamcast emulation on windows/x86 reicast is where future development is. Come and help us!

    Isso me faz acreditar que grande parte do código base do nullDC vem sendo aproveitado no Reicast.

    O programa também recebe constantes commits no github, com suporte a diversas plataformas, inclusive Linux.

    Mas a postagem não é para contar histórias, quero mesmo é ensinar as etapas de compilação do emulador. Prepara o terminal!

    1. Resolver dependências:

    $ sudo apt-get install build-essential libasound2 libasound2-dev libegl1-mesa-dev libgles2-mesa-dev git
    

    2. Descarregar os arquivos-fonte:

    $ git clone https://github.com/reicast/reicast-emulator.git
    

    3. Entrar no diretório correto, construir e instalar:

    $ cd reicast-emulator/shell/linux/
    $ make
    $ sudo make install
    

    Está instalado! A escassa documentação pode ser lida usando o comando man reicast.

    4. Abra o terminal e rode o comando:

    $ reicast
    

    O programa ira abrir e fechar subitamente, retornara erros por falta de Bios/flash. Faço isso para ele criar os caminhos dos diretórios e arquivos de configuração automaticamente.

    Após essa primeira execução o arquivo emu.cfg será criado em: ~/.config/reicast/

    5.A próxima etapa é o download da Bios/Flash na página: http://www.freewebs.com/animated_site/dc_bios.bin
    http://www.freewebs.com/animated_site/dc_flash.bin

    Os arquivos dc_bios.bin e dc_flash.bin devem ser copiados para: ~/.local/share/reicast/data/

    Não me pergunte o motivo de elegerem tal pasta, estou apenas seguindo a documentação.

    6. Ok! A configuração do controle é através do comando reicast-joyconfig. Antes de executá-lo descarregue as dependências:

    $ sudo apt-get install python-pip python-dev
    $ sudo pip install evdev
    

    Plugue o controle no computador e execute:

    $ mkdir -p ~/.config/reicast/mappings/
    $ reicast-joyconfig -f ~/.config/reicast/mappings/controller_ps3.cfg
    

    Ele vai pedir a id do dispositivo, então informe.

    fm4lloc@debian:~$ reicast-joyconfig
    17: Sony PLAYSTATION(R)3 Controller (/dev/input/event17, usb-0000:00:13.0-1/input0)
    Please enter the device id: 17

    No meu caso a id do controle do ps3 conectado apareceu como 17, o seu pode apresentar outro.

    Siga respondendo se quer mapear (Y – sim ou N – não) determinado botão. Não mapeei o digital pad 2, os botões C, D e Z quando perguntado.

    Depois de mapear o controle abra o arquivo: ~/.config/reicast/emu.cfg e acrescente o caminho da configuração recém criada do controle e sua respectiva id editando a seguinte parte do documento:

    [input]
    evdev_device_id_1 = 17
    evdev_mapping_1 = /home/fm4lloc/.config/reicast/mappings/controller_ps3.cfg
    

    NOTA

    Enquanto usava reicast-joyconfig para configurar os botões do controle do Playstation 3, um erro ao tentar mapear o botão A me impedia de avançar.

    O erro foi:

    reicast-joyconfig.py 
    17: Sony PLAYSTATION(R)3 Controller (/dev/input/event17, usb-0000:00:13.0-1/input0)
    Please enter the device id: 17
    Using device 17...
    Name: Sony PLAYSTATION(R)3 Controller
    File: /dev/input/event17
    Phys: usb-0000:00:13.0-1/input0
    Do you want to map a button to exit the emulator [Y/n] n
    Do you want to map the A button? [Y/n] 
    Press the A button now...
    Traceback (most recent call last):
      File "/usr/local/bin/reicast-joyconfig", line 237, in <module>
        mapping = setup_device(dev_id)
      File "/usr/local/bin/reicast-joyconfig", line 147, in setup_device
        print_mapped_button("%s button" % button, event)
      File "/usr/local/bin/reicast-joyconfig", line 89, in print_mapped_button
        code_id = evdev.ecodes.BTN[event.code]
    KeyError: 302
    

    Solucionei comentado a linha do script /usr/local/bin/reicast-joyconfig:

    print_mapped_button("%s button" % button, event)
    

    Comente acrescentando o caractere # (jogo-da-velha) no começo da linha retrocitada.

    7. Hora de jogar.

    Eis o melhor momento! Adianto a lista de compatibilidade, disponível aqui -> Reicast_Compatibility_List – a lista não é exaustiva, uma massa grande de jogos não foram adicionados nela e funcionam, caso do Shenmue 1.

    Atualmente o reicast suporta imagens no formato .CDI e .GDI. O comando para executar o jogo é:

    $ reicast /caminho_do_jogo/jogo.gdi
    

    Para iniciar em tela cheia use a opção -config x11:fullscreen=1:

    $ reicast -config x11:fullscreen=1 /caminho_do_jogo/jogo.gdi
    

    ou edite o arquivo emu.cfg e atribua o valor 1 (um) para fullscreen. A resolução também é alterada no emu.cfg

    [x11]
    fullscreen = 1
    height = 480
    width = 640
    

    Imagens do emulador:

    Este slideshow necessita de JavaScript.

    A configuração da maquina usada:

    Debian 8.2 Jessie
    Operating System =  Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u4 (2015-09-19) x86_64 GNU/Linux
    Physical RAM     =  3966 MB 
    CPU name         =  AMD Phenom(tm) II X4 955 Processor 
    CPU speed        =  3.193 ghz (4 logical threads) 
    Video Card       = GeForce GTX 460 1024gb – Driver proprietário da NVIDIA na versão 352.21
    
     
    • Fernando da Silva 2:19 am em 22 de fevereiro de 2016 Link Permanente | Resposta

      Obrigado pelo tutorial. Tenho algumas dúvidas:
      01 – toda vez que fecho o emualdor, ao abrir novamente, ele pedi para configurar a bios, como posso salvar a bios?
      02 – no meu fica na tela, botoes como se fosse para android, como posso retirar eles da tela?

    • pauloamanrique 2:56 pm em 11 de janeiro de 2018 Link Permanente | Resposta

      Nas dependencias faltou mesa-common-dev =)

  • Fm4lloc 9:35 pm em 25 de April de 2015 Link Permanente | Resposta
    Tags: , , , linux, parser, url   

    Simple parse-url in C 

    Simples URL parser que escrevi em C para exercitar o uso de expressões regulares.

    Modo de usar: ./parseurl url

    Exemplo de uso:

    $ ./parseurl 'scheme://username:password@subdomain.domain.tld:80/path/file-name.suffix?query-string#hash'
    

    Saída:

    +SCHEME: scheme
    +AUTHORITY: username:password@subdomain.domain.tld:80
     +USERINFO: username:password
      -USERNAME: username
      -PASSWORD: password
     -HOST: subdomain.domain.tld
     -PORT: 80
      +PATH: /path/file-name.suffix
       -FILENAME: file-name.suffix
       -QUERY: query-string
       -FRAGMENT: hash
    

    O código esta no Github. Para baixar use o comando:

    $ git clone https://github.com/fm4lloc/parse-url.git
    

    ou acesse a página https://github.com/fm4lloc/parse-url

    Após o download do código entre na pasta parse-url e compile.

    $ cd ./parse-url && make
    

    Recomendo ler esse post que escrevi sobre expresões regulares para entender melhor o funcionamento do programa: https://fm4lloc.wordpress.com/2014/01/06/usando-expressoes-regulares-em-c/

     
  • Fm4lloc 8:20 pm em 28 de January de 2015 Link Permanente | Resposta
    Tags: 7z, convert, converter, linux, , mess, , , zip   

    Converter arquivos 7z para Zip 

    Estava precisando converter algumas ROMs que estavam compactadas no formato 7z para zip. Após algumas buscas encontrei a ferramenta atoolhttp://www.nongnu.org/atool/; também disponível nos repositórios do Debian: # apt-get install atool

    O comando para converter todos os arquivos 7z contidos no mesmo diretório para zip seria:

    $ arepack -e --format=zip *.7z
    

    A reciproca é possível:

    $ arepack -e --format=7z *.zip
    

    Precisava excluir os arquivos enquanto eram convertidos, o espaço no disco estava acabando. A solução foi:

    #!/bin/sh
    
    for i in *7z
    do
      arepack -e --format=zip "${i}"
      rm "${i}"
    done
    
     
    • Allan 7:44 am em 22 de dezembro de 2016 Link Permanente | Resposta

      Can’t exec “7z”: Arquivo ou diretório não encontrado at /usr/bin/arepack line 1869.
      7z: cannot execute – Arquivo ou diretório não encontrado
      arepack: 7z …: non-zero return-code

  • Fm4lloc 3:40 am em 27 de January de 2015 Link Permanente | Resposta
    Tags: arcade, , linux, , qmc2   

    Compilando o QMC2 no Debian 

    INTRODUÇÃO

    QMC2 é um front-end gráfico para M.A.M.E (Multiple Arcade Machine Emulator), M.E.S.S (Multiple Emulator Super System) e U.M.E (Universal Machine Emulator) e derivados, sendo baseado em QT e licenciado sob a GPLv2.

    O programa fornece uma interface robusta para gerenciar ROMs, permitindo criar databases completas com sinopse, imagens, flayers, pré-visualização (snaphot) e vídeos sobre cada ROM da sua biblioteca. Também conta com ferramentas para auditar dumpagens e encontrar arquivos obsoletos ou inválidos.

    QMC2 é a melhor ferramenta do gênero disponível para Linux.

    img6

    O guia foi escrito embasado na versão 0.47 do QMC2 rodando sobre o Debian 7 64 bits.

    INSTALANDO O QMC2

    Existe a opção de baixar a versão estável das fontes direto do navegador ou usar Subversion para pegar o último lançamento do desenvolvedor, algo não recomendado, salvo se estiver tendo problemas com a versão estável.

    A página para downoad da versão estável é – http://sourceforge.net/projects/qmc2/

    Se precisar da lastest version use o Subversion e descarregue os arquivos-fonte.

    $ sudo apt-get install subversion
    $ mkdir ~/src; cd ~/src
    $ svn co https://svn.code.sf.net/p/qmc2/code/trunk qmc2-svn
    
    Atualiza a cópia local:
    $ cd ~/src/qmc2
    $ svn update
    
    Resolvendo dependências

    Instale-as direto do repositório:

    $ sudo apt-get install build-essential libqt4-dev libsdl-dev libphonon-dev libxmu-dev libqt4-sql-sqlite
    

    Não posso afirmar que serão apenas estas para você.

    O libqt4-sql-sqlite não é usado para compilação, serve para o QMC2 trabalhar normalmente e evitar isso:

    20:18:27.844: QtWarningMsg: QSqlQuery::prepare: database not open
    20:18:27.845: AVISO: falha ao carregar ‘id’ da base de dados do cache XML: consulta = ”, erro = ‘Driver not loaded Driver not loaded’
    
    Compilando

    Descompacte o pacote com os arquivos-fonte se tiver feito o download direto da página.

    $ tar -jxvf ./qmc2-0.47.tar.bz2
    

    Entre no diretório com os códigos-fonte e inicie a compilação:

    $ cd ./qmc
    $ make -j5
    

    Usei a opção -j5 para dividir o trabalho em 5 processos simultâneos e agilizar a compilação. A fórmula recomendada para compilar com esse parâmetro é pegar o número de núcleos do processador e somar 1. Não é assegurado o máximo de eficiência com essa receita, muitas vezes valores maiores podem proporcionar um desempenho melhor, porém manifestamente irrisório no caso de aplicativos pequenos como o nosso. Destarte, siga a regra: J = N + 1.

    A compilação retorna ao final:

    Build of QMC2 v0.47 complete 
    Target emulator: SDLMAME
    
    Instalando

    Use o comando:

    $ sudo make install
    

    Para facilitar futuras instalações e afastar o entediante trabalho de excluir os arquivos pertinentes ao QMC2 na unha, visto que o Makefile dele ainda não tem a opção uninstall, aconselho servi-se do Checkinstall e construir um pacote do tipo Debian a partir das fontes. Significa compilar tudo novamente.

    $ sudo apt-get install checkinstall
    $ sudo checkinstall -D --install=no --pkgarch=all
    

    Instalando o pacote gerado:

    $ sudo dpkg -i ./qmc2_20150123-1_all.deb
    
    INSTALANDO E CRIANDO UMA CONFIGURAÇÃO PARA O MAME

    $ sudo apt-get install mame
    

    Crie o arquivo meme.ini com a configuração default

    $ mkdir -p ~/.mame; cd ~/.mame
    $ mame -createconfig
    

    Abra o arquivo mame.ini recém-criado em ~/.mame/ e acrescente os caminhos das ROMs. Havendo mais de uma pasta de ROMs em locais diferentes separe elas usando o caractere “;” (ponto e vírgula). Exemplo:

    rompath    /media/Backup/Roms;/media/Backup/Neo-Geo
    
    EXECUTANDO O QMC2

    Na primeira vez que o QMC2 for iniciado será requisitado a localização das ROMs, executável SDLMAME etc. A única coisa que você deve adicionar é o caminho para o executável, normalmente /usr/games/mame. As demais configurações serão importadas do arquivo mame.ini configurado anteriormente.

    img

    Após iniciar:

    1 Entre no menu Ferramentas->Opções; selecione a aba “Emulador” e sua sub-aba “Configuração Global”.

    img2

    2 Clique sobre o botão “Importar de…”, depois “Selecionar Arquivo..”.

    3 Caminhe até a pasta ~/.mame e abra o arquivo mame.ini. A pasta ~/.mame não aparece como deve ter percebido, esta oculta. Para desocultar clique com o botão direito do mouse sobre a interface do selecionador de arquivos do QMC2 e ative a opção “Mostrar Ficheiros Escondidos”.

    img3

    4 Após importar a configuração clique em “OK”.

    5 Aperte Ctrl+R para recarregar a lista de ROMs. Isso apenas lista as ROMs disponíveis.

    6 Para verificar o estado dos jogos aperte Ctrl+1. O processo de verificação é demorado, porém vital para saber quais ROMs são reconhecidas e deverão funcionar no emulador.

    Os snapshots, artwork, ícones e afins são configurados em “Ferramentas->Opções…”; sub-aba “Arquivos / Diretórios” dentro da principal “Front end”.

    img4

    Para as imagens e ícones serem mostrados vá em “Verificar Imagens / Ícones…” (Ctrl+3 para abrir).

    img5

    Pronto. Só jogar e seguir aumentando sua base de dados. Os controles são configurados no MAME. Aperte a tecla TAB quando ele estiver rodando para acessa-las.

     
  • Fm4lloc 6:04 am em 3 de November de 2014 Link Permanente | Resposta
    Tags: 64 bits, , , , gtx, gtx 460, , linux, , pcsx2, playsation, sony, , x64   

    Instalando o pcsx2 no Debian 9.5 64bits 

    Siga essas etapas:

    1. Incluir os repositórios contrib e non-free em sua source.list; além de acrescentar stretch-backports.

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

    2. Habilitar Multiarquitetura:

    sudo dpkg --add-architecture i386
    sudo apt update
    sudo apt upgrade
    

    3. Instalar o PCSX2

    sudo apt install -t stretch-backports pcsx2
    

    5. Descarregar o pacote contendo as Bios do Playsation 2 na página – Playstation 2 BIOS Pack; Descompactar o arquivo e mover o conteúdo da pasta “bios” para a do emulador.

    sudo apt install p7zip-full 
    7z x ./Playstation-2-Bios-Pack.7z
    mv bios ~/.config/PCSX2/
    

    Agora é só inciar o emulador e seguir configurando. Recomendo buscar por configurações específicas para determinados jogos que podem rodar de modo não esperado.

     
  • Fm4lloc 3:07 am em 18 de July de 2014 Link Permanente | Resposta
    Tags: codigos, computador antigo, configuração, conky, , gtk, linux, , , , tint2   

    Montando um ambiente minimalista com Debian Linux 

    Nota: 29/2018 – Essa postagem está desatualizada, os links e outras coisas explicadas aqui não devem mais ser aplicadas, desse modo, recomendo que dê uma lida nessa nossa postagem aqui no blog: Minideb – Debian minimalista com openbox; os passos desse artigo foram automatizados e atualizados em forma de script.

    1024x768_scrotINTRODUÇÃO

    Nesse texto explicarei como ajustar um ambiente minimalista e de alta performance com o Debian.
    Consegui um sistema altamente estável, leve e funcional, consumindo menos de 130M de RAM quando ocioso.

    Tive o cuidado de testar todos os passos e compartilhar as configurações usadas pelos principais programas.

    As dicas expostas podem ser ridiculamente fáceis ou extremamente complicadas para algumas pessoas, especialmente para as não habituadas ao Linux.

    O texto considera que o aventureiro tenha feito uma instalação limpa do Debian, sem ter selecionado a coleção de software indicada como Debian desktop evironment durante o procedimento; Os utilitários standard de sistema são aconselháveis.

    seleção de software debian

    SUPER USUÁRIO

    Antes de tentar algo configure o comando sudo. Considero perigoso ficar como root por muito tempo, tenho receio de assumir privilégios de super usuário e esquecer de abandona-los.

    # apt-get install sudo
    

    Descrição do pacote:

    Provide limited super user privileges to specific users Sudo is a program designed to allow a sysadmin to give limited root privileges to users and log root activity. The basic philosophy is to give as few privileges as possible but still allow people to get their work done.

    Após a instalação abra o visudo para editar o arquivo /etc/sudoers de forma segura. É só digitar visudo como root.

    # visudo
    

    Com o arquivo aberto adicione a seguinte linha:

    usuário ALL=(ALL:ALL) ALL
    

    Mude a palavra “usuário” pelo nome do utilizador, salve as modificações pressionando Ctrl+o; sair é Ctrl+x.

    É recomendado adicionar no local destacado para manter o layout do sudoers organizado.

    # User privilege specification
    root ALL=(ALL:ALL) ALL 
    --ADICIONAR AQUI--
    

    MEDO DA ESCURIDÃO

    thumb_6206_34

    Se um gerenciador de janelas não foi escolhido durante a instalação é provável que o sistema careça do Xorg e seus afins.

    Afinal, o que é o Xorg ?
    Também conhecido como Xserver, trata-se da implementação aberta do X window system version 11, vital para correr aplicações GUI (Graphical User Interface). O pacote traz um conjunto de ferramentas e bibliotecas responsáveis por desenhar as aplicações na tela, sejam elas feitas com GTK, Qt ou outra toolkit.

    Instalando:

    $ sudo apt-get install xorg
    

    GERENCIADOR DE JANELAS, ARQUIVOS E LOGIN.

    obmenu thunar icones fazenza 9752_large

    Execute:

    $ sudo apt-get install openbox obconf obmenu menu thunar thunar-archive-plugin slim
    
    openbox Gestor de janelas.
    obconf Utilitário gráfico para configurar as preferências do openbox.
    obmenu Ferramenta gráfica para editar menus do Openbox
    menu Gera e sincroniza menus de programas para todas as aplicações sensíveis a menu
    thunar Gerenciador de arquivos.
    thunar-archive-plugin Plugin de extração e criação de arquivos para o Thunar.
    slim Login manager

    Escreva startx para subir o modo gráfico ou reinicie o sistema com o comando “sudo shutdown -r now”.

    O primeiro contato com a área de trabalho pode chocar, é perceptível a crueza do sistema, não existe nada além do menu principal do Openbox. Mas calma, não é hora de desesperar, o esforço vai valer a pena.

    A falta de um sub-menu dinâmico abrigando atalhos para os softwares é perceptível, o menu padrão não é muito organizado. Tal contratempo pode ser resolvido com o openbox-menu (A fast and lightweight pipe-menu for Openbox).

    openbox-menu

    Obtendo os sources:

    $ wget https://mimarchlinux.googlecode.com/files/openbox-menu-0.3.6.7.tar.bz2
    

    Certamente você precisará resolver algumas dependências para gerar o binário:

    $ sudo apt-get install build-essential libgtk2.0-dev libmenu-cache1-dev
    

    Descompactando, compilando e instalando:

    $ tar -jxvf openbox-menu-0.3.6.7.tar.bz2
    $ cd openbox-menu-0.3.6.7
    $ make
    $ sudo make install
    

    É opcional, mas é possível construir um pacote Debian e facilitar futuras instalações:

    $ sudo apt-get install checkinstall
    $ sudo checkinstall -D --install=no --pkgarch=all
    $ sudo dpkg -i openbox-menu_0.3.6.7-1_all.deb
    

    Isso vai recompilar o programa.

    Depois da instalação crie um novo pipe-menu através do programa obmenu (instalado anteriormente), é só clicar sobre o botão add nele e escolher Pipemenu. O campo id deve ser preenchido com o valor “desktop-app-menu”, enquanto o campo execute recebe o comando “/usr/bin/openbox-menu /etc/xdg/menus/xfce-applications.menu”. Ambos sem aspas.

    Nada impede a inserção do novo pipe-menu diretamente no documento ~/.config/openbox/menu.xml:

    <menu id="desktop-app-menu" label="Applications" execute="/usr/bin/openbox-menu /etc/xdg/menus/xfce-applications.menu" />
    

    O Openbox deve ser reiniciado em caso de erro.

    BARRA DE TAREFAS, SYSTRAY, VOLUME E CONEXÕES DE REDE

    O sistema ainda não possui barra de tarefas e systray (área de notificação). Instale:

    $ sudo apt-get install tint2 trayer
    

    tint2:
    tint2-example

    Para deixar semelhante ao da imagem acima as linhas ulteriores deverão ser copiadas para ~/.config/tint2/tint2rc

    # Tint2 config file
    # Generated by tintwizard (http://code.google.com/p/tintwizard/)
    # For information on manually configuring tint2 see http://code.google.com/p/tint2/wiki/Configure
     
    # Background definitions
    # ID 1
    rounded = 0
    border_width = 0
    background_color = #000000 100
    border_color = #414140 100
     
    # ID 2
    rounded = 0
    border_width = 0
    background_color = #1F262E 100
    border_color = #232426 100
     
    # ID 3
    rounded = 0
    border_width = 0
    background_color = #000000 100
    border_color = #232426 1000
     
    # Panel
    panel_monitor = all
    panel_position = bottom center horizontal
    panel_size = 100% 26
    panel_margin = 0 0
    panel_padding = 7 0 7
    panel_dock = 0
    wm_menu = 0
    panel_layer = top
    panel_background_id = 1
     
    # Panel Autohide
    autohide = 0
    autohide_show_timeout = 0.3
    autohide_hide_timeout = 2
    autohide_height = 2
    strut_policy = follow_size
     
    # Taskbar
    taskbar_mode = single_desktop
    taskbar_padding = 2 3 2
    taskbar_background_id = 0
    taskbar_active_background_id = 0
     
    # Tasks
    urgent_nb_of_blink = 8
    task_icon = 1
    task_text = 1
    task_centered = 1
    task_maximum_size = 140 35
    task_padding = 6 2
    task_background_id = 3
    task_active_background_id = 2
    task_urgent_background_id = 2
    task_iconified_background_id = 3
    task_tooltip = 0
     
    # Task Icons
    task_icon_asb = 70 0 0
    task_active_icon_asb = 100 0 0
    task_urgent_icon_asb = 100 0 0
    task_iconified_icon_asb = 70 0 0
     
    # Fonts
    task_font = sans 10
    task_font_color = #FFFFFF 68
    task_active_font_color = #FFFFFF 83
    task_urgent_font_color = #FFFFFF 83
    task_iconified_font_color = #FFFFFF 68
    font_shadow = 0
     
    # System Tray
    systray = 1
    systray_padding = 0 4 5
    systray_sort = ascending
    systray_background_id = 0
    systray_icon_size = 16
    systray_icon_asb = 70 0 0
     
    # Clock
    time1_format = %H:%M
    time1_font = sans 10
    time2_format = %A %d %B
    time2_font = sans 8
    clock_font_color = #FFFFFF 74
    clock_padding = 1 0
    clock_background_id = 0
    clock_rclick_command = orage
     
    # Tooltips
    tooltip_padding = 2 2
    tooltip_show_timeout = 0.7
    tooltip_hide_timeout = 0.3
    tooltip_background_id = 1
    tooltip_font = sans 10
    tooltip_font_color = #000000 80
     
    # Mouse
    mouse_middle = none
    mouse_right = close
    mouse_scroll_up = toggle
    mouse_scroll_down = iconify
     
    # Battery
    #battery = 0
    #battery_low_status = 10
    #battery_low_cmd = notify-send "battery low"
    #battery_hide = 98
    #bat1_font = sans 8
    #bat2_font = sans 6
    #battery_font_color = #FFFFFF 74
    #battery_padding = 1 0
    #battery_background_id = 0
     
    # End of config
    

    Leia a documentação da tint2 AQUI.

    Penso que você também queira aplicações para controlar o volume e gerir as conexões de rede

    $ sudo apt-get install alsa-base volumeicon-alsa wicd-gtk
    

    Instalei tudo, mas a barra de tarefas não apareceu ?
    Calma. Não vai aparecer automaticamente, adiante ensino como resolver.

    FIXANDO OS APLICATIVOS PARA ABRIREM NA INICIALIZAÇÃO DO OPENBOX

    Antes de sair invocando tint2, trayer e volumeicon pelo terminal, saiba, existe a possibilidade de despertá-los junto ao Openbox.

    Durante o carregamento do Openbox é executado o script autostart.sh, nele é inserido comandos que correrão paralelamente ao carregamento sessão.

    Para editá-lo:

    $ nano ~/.config/openbox/autostart.sh
    

    O conteúdo depende da necessidade pessoal, todavia, esse serve de base:

    # thunar no modo daemon
    thunar --daemon &
    
    # barra de tarefas
    tint2 &&
    
    # systray
    trayer --expand true --transparent true --alpha 255 --edge bottom --align right --expand true --SetDockType true --widthtype request &&
    
    # controle de volume
    volumeicon &
    

    Dê permissão:

    $ chmod 755 ~/.config/openbox/autostart.sh
    

    A sessão deve ser reiniciada para surgir efeito. O comando “openbox –exit” forçaria a retomada para a tela de login, mas não é o mais recomendado. Você pode contemplar os novos ajustes executando o script manualmente.

    PAPEL DE PAREDE

    O plano de fundo é setado com o Nitrogen:

    $ sudo apt-get install nitrogen
    

    Abra utilitário gráfico e escolha o papel de parede.

    A fim de exibir a imagem durante a inicialização acrescente no começo do seu script ~/.config/openbox/autostart.sh:

    nitrogen --restore &
    

    ATALHOS DE TECLADO

    Os atalhos vão dentro de ~/.config/openbox/rc.xml

    Exemplo para abrir o Thunar pressionando Alt+F

    <keybind key="A-F">
    	<action name="execute">
    		thunar
    	
    
    

    PERSONALIZANDO O SISTEMA COM TEMAS GTK, ÍCONES, CURSORES E FONTES.

    Os temas e cursores baixados manualmente devem ficar na pasta ~/.themes, os ícones na ~/.icons, enquanto as fontes vão para ~/.fonts

    Comece as personalizações com os utilitários:

    $ sudo apt-get install lxappearance gtk2-engines
    
    lxappearance Ferramenta para auxiliar na customização das GTK+ themes, ícones, fontes, cursor, esquema de cor. lxappearance
    gtk2-engines Este pacote contém o motor (“engine”) que se esconde por trás dos temas para GTK+ e aplicações Gnome. Ele redefine o modo como as widgets do GTK+ são desenhadas. O pacote inclui os seguintes motores: Clearlooks, Crux, High contrast, Industrial, LighthouseBlue, Metal, Mist, Redmond95, ThinIce.

    NA UNHA

    O lxappearance fornece uma GUI muito intuitiva para customizar o Desktop, mas acredito que a configuração manual contribui para o conhecimento do fuçador.

    Segue o esquema para as configurações manuais:

    No terminal:

    $ touch ~/.gtkrc-2.0
    $ touch ~/.gtkrc-2.0.mine
    

    O meu ~/.gtkrc-2.0 guarda as linhas:

    include "/home/fm4lloc/.themes/Bridge/gtk-2.0/gtkrc"
    include "/home/fm4lloc/.gtkrc-2.0.mine"
    

    Mude os caminhos para as correspondências equivalentes no seu computador.

    A substituição dos ícones e fontes limita-se em tecer dentro do ~/.gtkrc-2.0.mine uma estrutura próxima de:

    style "Sans"
    {
    	font_name = "Sans 13"
    }
    widget_class "*" style "Sans" 
    
    gtk-font-name = "Sans 12"
    gtk-icon-sizes = "panel-menu=16,16:panel=16,16:gtk-button=13,13"
    gtk-fallback-icon-theme = "Faenza"
    gtk-icon-theme-name = "Faenza-Darkest"
    gtk-toolbar-style   = GTK_TOOLBAR_ICONS	#Only icons
    gtk-toolbar-style   = GTK_TOOLBAR_TEXT	#Only text
    gtk-toolbar-style   = GTK_TOOLBAR_BOTH	#Both icons and text; default, used if nothing is specified.
    gtk-toolbar-style   = GTK_TOOLBAR_BOTH_HORIZ	#Icons and text next to the icons
    

    Faça as modificações necessárias. O pacote de ícones usado no exemplo é o Faenza, o nome colocado nos campos pertinentes aos ícones é o mesmo das respectivas pastas situadas em ~/.icons.

    Exemplo:
    ~/.icons/Faenza
    ~/.icons/Faenza-Darkest

    Você não terá muita dificuldade, a sintaxe do documento é instrutiva.

    Para mudar o tema dos cursores abra o documento .Xresources

    $ nano ~/.Xresources
    

    E escreva nele:

    Xcursor.theme: DMZ-White
    Xcursor.size:  16
    

    O tema do cursor definido no exemplo faz parte do pacote dmz-cursor-theme.

    Para pesquisar outros estilos de cursor presentes na maquina:

    $ find /usr/share/icons -type d -iname "*cursors*"
    $ find ~/.icons -type d -iname "*cursors*"
    

    Exemplo de saída:
    /usr/share/icons/Adwaita/cursors
    /usr/share/icons/DMZ-White/cursors
    /usr/share/icons/DMZ-Black/cursors

    DESLIGAR, REINICIAR E HIBERNAR COM OBSHUTDOWN

    Não gosto de desligar o computador escrevendo shutdown ou halt, prefiro encerrar as sessões usando o obshutdown, ele mostra uma tela limpa e intuitiva para apagar a maquina.

    obshutdown-scrot

    Infelizmente ele não existe no repositório estável, será preciso compila-lo.

    As dependências:

    $ sudo apt-get install libgtk2.0-dev git automake autoconf
    

    Obtenha os sources e deixe o processador com o trabalho duro.

    $ git clone https://github.com/panjandrum/obshutdown.git
    $ cd obshutdown
    $ ./configure
    $ make
    $ sudo make install
    

    Lembrando, para criar um .deb:

    $ sudo checkinstall -D --install=no --pkgarch=all
    $ sudo dpkg -i obshutdown_0.1-rc1-1_all.deb
    

    Copie a configuração default para $HOME:

    $ mkdir -p ~/.config/obshutdown/
    $ cp /usr/local/share/obshutdown/example.rc ~/.config/obshutdown/obshutdown.rc
    

    A configuração do meu Obshutdown com os botões em português:

    #
    # Openbox shutdown dialog
    # This is example obshutdown rc file
    # Copy this file to ~/.obshutdown.rc and customise
    #
     
    [general]
    version =        0.1-rc1
    verbose =        false
    default_action = shutdown
    composite =      false
    theme =          oxygen
    buttons =        cancel logout shutdown restart
    #buttons =        cancel logout shutdown restart suspend hibernate
     
    [actions]
    logout =         openbox --exit
    shutdown =       dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
    restart =        dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
    lock =
    switch =
    suspend =        dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
    hibernate =      dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
    custom = 
     
    [shortcuts]
    logout =         l
    shutdown =       s
    restart =        r
    lock =
    switch =
    suspend =        u
    hibernate =      h
    custom = 
     
    [labels]
    cancel =         CANCELAR
    logout =         LOGOUT
    restart =        RESETAR
    shutdown =       DESLIGAR
    lock =           TRAVAR
    switch =         TROCAR USUARIO
    suspend =        SUSPENDER
    hibernate =      HIBERNAR
    

    Não esqueça de incluir o obshutdown ao menu do openbox.

    MONITOR DE SISTEMA

    Quando se pensa em monitor de sistema altamente configurável, a palavra que galga na cabeça dos usuários Linux é a conky.

    $ sudo apt-get install conky
    

    Conky é um caso a parte no texto, não vou me aprofundar nele, a página dos desenvolvedores fornece vários tutoriais de como configurá-lo. Porém, como é de praxe, disponibilizarei o meu:

    conkyshot

    Salvar o conteúdo para ~/.conkyrc

    # Minimalist conkyrc
    # used font
    #---------------------------------------------------------------------#
    # PF Tempesta Seven	=> http://www.dafont.com/pf-tempesta-seven.font
    #---------------------------------------------------------------------#
    
    #avoid flicker
    double_buffer yes
    
    #own window to run simultanious 2 or more conkys
    own_window  yes
    own_window_transparent true
    own_window_type normal
    own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
    
    # Contour
    draw_outline no
    
    # Shades
    draw_shades no
    default_shade_color 000000
    
    # Position
    gap_y 10
    gap_x 10
    
    # Alignment
    alignment top_left
    # alignment botton_left
    
    # Interval
    update_interval 2
    
    # Colors
    default_color FFFFFF
    color1 1793D1
    color2 535353
    color3 F0F0F0
    color4 D9D9D9
    color5 1793D1
    
    # Font
    use_xft yes
    xftfont PF Tempesta Seven:pixelsize=8
    
    # Text alpha when using Xft
    #xftalpha 0.10
    
    # to prevent window from moving
    use_spacer none
    minimum_size 1024 0
    
    TEXT
    ${color2}CPU1: ${color3}${cpu cpu1}% \
    ${color2}CPU2: ${color3}${cpu cpu2}% \
    ${color2}CPU1: ${color3}${cpu cpu2}% \
    ${color2}CPU4: ${color3}${cpu cpu4}% ${color5} | \
    ${color2}Ram: ${color3}${mem}/${memmax} ${color5} | \
    ${color2}Swap: ${color3}${swapperc}% ${color5} | \
    ${color2}Home: ${color3}${fs_free_perc /home}% ${color4}free ${color5} | \
    ${color2}Root: ${color3}${fs_free_perc /root}% ${color4}free ${color5} | \
    ${color2}Eth0: ${color4}DOWN ${color3}${downspeed eth0} ${color4}UP ${color3}${upspeed eth0} ${color5} | \
    ${color2}Uptime: ${color3}${uptime}${color5} | \
    ${color2}Top: ${color3} ${top name 1}${top cpu 1}${top mem 1}
    

    Pesquise mais sobre o conky e conheça as possibilidades.

    OS INDISPENSÁVEIS

    Para fechar, coloco os aplicativos que considero fundamentais para ter no sistema:

    $ sudo apt-get install sakura volumeicon-alsa wicd-gtk evince mirage gmrun geany scrot file-roller brasero audacious vlc galculator transmission-gtk nitrogen iceweasel iceweasel-l10n-pt-br icedove icedove-l10n-pt-br xscreensaver ntfs-config gimp inkscape
    
    sakura Emulador de terminal decente
    volumeicon-alsa Indicador de volume
    wicd-gtk Gestor de Redes
    evince Leitor de PDF
    mirage Visualizador de imagem
    gmrun Lançador de aplicativo
    geany Editor de texto/IDE
    scrot Capturador de tela
    file-roller Manipulador de arquivos compactados
    brasero Gravador de CD/DVD
    audacious Player MP3
    vlc Player multimédia, ideal para assistir vídeos
    galculator Calculadora
    transmission-gtk Cliente Torrent
    nitrogen Gerenciador de papéis de parede
    iceweasel Navegador
    iceweasel-l10n-pt-br Linguagem português para o iceweasel
    icedove Cliente de e-mail
    icedove-l10n-pt-br Linguagem português para o icedove
    xscreensaver Protetor e travador de tela
    ntfs-config Utilitário gráfico para montar partições NTFS
    gimp Editor de imagens
    inkscape Editor vetorial
    Simples escaneador de documentos simple-scan

    Libre Office em português

    $ sudo apt-get install libreoffice libreoffice-l10-pt-br libreoffice-gtk
    
     
    • Vulto 1:06 pm em 15 de março de 2016 Link Permanente | Resposta

      Excelente tutorial.
      Me fez conhecer mais do Debian e acabei de fazer minha instalação.
      Acabei tendo várias ideias depois disso.
      Valeu

  • Fm4lloc 3:30 am em 25 de May de 2014 Link Permanente | Resposta
    Tags: AMD Catalyst Legacy 13.1, ati, , driver, linux, Radeon, , xorg   

    Dica rápida: Instalando driver (AMD Catalyst Legacy 13.1) da Radeon HD 4250 no Debian Weezy 

    Recentemente precisei remover minha placa off-board do computador e tive que usar uma Radeon HD 4250 on-board e consequentemente escrever essa dica.

    O driver suporta GPUs das series:
    Radeon HD 4000, Radeon HD 3000 e Radeon HD 2000.

    ETAPAS:

    Adicione na sua /etc/apt/source.list o repositório Debian Backport

    # Backported packages for Debian 7 "Wheezy"
    deb http://http.debian.net/debian/ wheezy-backports main contrib non-free

    Abra o terminal e atualize os repositórios, depois instale o linux-header apropriado, os drivers e o Catalyst Control Center.

    # aptitude update
    # aptitude install linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,')
    # aptitude -r -t wheezy-backports install fglrx-legacy-drive fglrx-legacy-control

    Crie um xorg.conf básico com o comando:

    # aticonfig --initial

    Rode o comando startx para subir o X.

    Para ajustar a resolução, taxa de atualização do monitor e coisas do gênero execute o comando amdcccle e altere as configurações.

    Referência: https://wiki.debian.org/ATIProprietary

     
  • Fm4lloc 6:57 pm em 5 de February de 2014 Link Permanente | Resposta
    Tags: , , examplo, gnome, libxml2, linux, mit, , parse, parsing, xml   

    Analisando arquivos XML locais e remotos com libxml2. 

    libxml2 é uma biblioteca de software feita para  analisar documentos XML , escrita em C e disponibilizada sob a licença MIT. Mesmo construído em  C, fornece “ligações” para outras linguagens.

    A biblioteca também é conhecida pela portabilidade, compilação fácil e alta velocidade.

    A instalação através dos repositórios do Debian fica:

    $ sudo apt-get install libxml2-dev
    

    O código abaixo foi escrito para analisar arquivos remotos ou locais, ele fazia parte de um projeto que eu estava desenvolvendo para buscar músicas no site 4shared, mas foi descontinuado.

    Como a postagem não trata-se de tutorial, vou dispensar as explicações. O código é pequeno e de fácil compreensão após breve exercício mental.

    Recomendo a leitura da documentação oficial da libxml2.

    Para compilar:

    $ gcc $(xml2-config --cflags --libs) ./parse.c -o ./parse
    

    O layout do arquivo XML analisado pelo código é:

    <!-- ROOT -->
    <search-result>
    	<!-- MAIN -->
    	<query/>
    	<total-files>8975</total-files>
    	<page-number>1</page-number>
    	<pages-total>897</pages-total>
    	<start>0</start>
    	<files-per-page>10</files-per-page>
    	<files-approx-count>16219367</files-approx-count>
    	<!-- FILE -->
    	<result-files>
    		<file>
    			<name>Foo</name>
    		</file>
    		<file>
    			<name>Bar</name>
    		</file>
    		<file>
    			<name>Qux</name>
    		</file>
    	</result-files>
    </search-result>
    

    O mesmo modelo é usado no documento gerado na página: https://search.4shared.com/network/searchXml.jsp

    O programa:

    #include <stdio.h>
    #include <stdlib.h>
     
    #include <libxml/tree.h>
    #include <libxml/parser.h>
     
    /*
     * Copyright (C) 2014 Fm4lloc <fm4lloc@gmail.com>
     *
     * This program is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     *
     */
     
    void cleanAll(xmlDocPtr doc)
    {
        xmlFreeDoc (doc);
        /*
         * Free the global variables that may
         * have been allocated by the parser.
         */
        xmlCleanupParser ();
    }
     
    void printXmlContent (xmlDocPtr doc, xmlNodePtr cur)
    {
        xmlChar *key = NULL;
     
        if ((key = xmlNodeListGetString (doc,
            cur->xmlChildrenNode, 1)))
        {
            printf("%s\n", key);
            xmlFree (key);
        }
    }
     
    static void eachFile (xmlDocPtr doc, xmlNodePtr cur)
    {
        cur = cur->xmlChildrenNode;
        while (cur != NULL)
        {
            /* <search-result>
             *      ...
             *      <result-files>
             *          <file>
             *              <name>
             */
            if ((!xmlStrcmp (cur->name, (const xmlChar *) "name")))
                printXmlContent (doc, cur);
     
            cur = cur->next;
        }
    }
     
    static void parseFile (xmlDocPtr doc, xmlNodePtr cur)
    {
        cur = cur->xmlChildrenNode;
        while (cur != NULL)
        {
            if ((!xmlStrcmp (cur->name, (const xmlChar *) "file")))
                eachFile (doc, cur);
     
            cur = cur->next;
        }
    }
     
    static void parseMainInfo (xmlDocPtr doc, xmlNodePtr cur)
    {
        cur = cur->xmlChildrenNode;
        while (cur != NULL)
        {
                if (cur->type == XML_ELEMENT_NODE)
                {
                    /* Stop when you find the node: result-files */
                    if ((!xmlStrcmp (cur->name, (const xmlChar *) "result-files")))
                        break;
     
                    printXmlContent (doc, cur);
                }       
     
            cur = cur->next;
        }
    }
     
    /**
     * parseDoc:
     * @filename: A filename or an URL
     *
     * Parse XML
     *
     * Returns int
     */
    static int parseDoc (const char *filename)
    {
        xmlDocPtr  doc = NULL;
        xmlNodePtr cur = NULL;
     
        doc = xmlReadFile (filename, NULL, 0);
        if (doc == NULL)
        {
                fprintf (stderr, "Document not parsed.\n");
                return 1;
        }
     
        /* Get the root element node */
        cur = xmlDocGetRootElement(doc);
        if (cur == NULL)
        {
                fprintf (stderr,"empty document\n");
                cleanAll (doc);
                return 1;
        }
     
        /* Check if node root == "search-result" */
        if (xmlStrcmp (cur->name, (const xmlChar *) "search-result"))
        {
                fprintf (stderr,"document of the wrong type, root node != %s\n", cur->name);
                cleanAll (doc);
                return 1;
        }
     
        /* <search-result> */
        parseMainInfo (doc, cur);
     
        /* <search-result>
         *      ...
         *      <result-files> */
        cur = cur->xmlChildrenNode;
        while (cur != NULL)
        {
            if ((!xmlStrcmp (cur->name, (const xmlChar *) "result-files")))
            {
            /* <search-result>
             *      <result-files>
             *          <file>
             */
                parseFile (doc, cur);
            }
     
            cur = cur->next;
        }
     
        cleanAll (doc);
     
        return 0;
    }
     
    int main(void)
    {
        if (parseDoc ("./content.xml") != 0)
            return -1;
     
        return 0;
    }
    

    Saída padrão:

    8975
    1
    897
    0
    10
    16219367
    Foo
    Bar
    Qux
    
     
c
escrever novo post
j
post seguinte/ comentário seguinte
k
post anterior/comentário anterior
r
Resposta
e
Editar
o
mostrar/esconder comentários
t
voltar ao topo
l
vá para login
h
mostrar/ocultar ajuda
shift + esc
Cancelar