<chapter id="tinkering-under-the-hood"> <!-- Uncomment the <*info > below and add your name to be --> <!-- credited for writing this section. --> <!-- <chapterinfo> <authorgroup> <author> <firstname >Your First Name here</firstname> <surname >Your Surname here </surname> </author> </authorgroup> </chapterinfo> --> <title >Trabalhando nos Bastidores do &kde;</title> <sect1 id="hand-editing-config-files"> <sect1info> <author ><personname > <firstname >Nicolas</firstname > <surname >Goutte</surname > </personname > <email >goutte@kde.org</email > </author> </sect1info> <title >Editando Manualmente os Arquivos de Configuração</title> <sect2 id="hand-editing-intro"> <title >Introdução</title> <para >No &kde;, os arquivos de configuração são fáceis de alterar com um editor de texto simples como o &kate;, uma vez que que os arquivos de configuração são arquivos de texto.</para> <para >Um exemplo de um arquivo de texto:</para> <programlisting >[Geral] AutoSalvar=1 UltimoArquivo=/var/tmp/teste.txt</programlisting> <para >Os arquivos de configuração de um usuário estão em <filename class="directory" >.kde/share/config</filename > (substitua o <filename >.kde</filename > pela sua variável de ambiente $<envar >TDEHOME</envar >) e os globais estão na sub-pasta <filename class="directory" >share/config</filename > do local onde o KDE foi instalado. (Você poderá encontrar esta localização executando o comando <command >tde-config --prefix</command >.) Os seus nomes terminam normalmente em 'rc' (sem um ponto inicial), como por exemplo <filename >kopeterc</filename >.</para> <warning ><para >Contudo, os arquivos de configuração editados manualmente, podem comprometer a estabilidade do seu &kde;. A maioria dos aplicativos não verificam o que lêem dos seus arquivos de configuração e poderão ser prejudicados pelo que obtêm da sua configuração, fazendo com que o aplicativo inclusive estoure.</para ></warning> </sect2> <sect2 id="hand-editing-backups"> <title >Cópias de Segurança</title> <para >Por isso, a primeira regra é fazer uma cópia de segurança do seu arquivo antes de modificá-los. A cópia de segurança deverá ser guardada fora de qualquer sub-pasta da <filename class="directory" >.kde</filename > (ou da pasta correspondente a $<envar >TDEHOME</envar >). As cópias de segurança são sempre uma boa idéia no caso de uma falha geral do &kde; que destrua os arquivos de configuração importantes (como por exemplo as suas opções do &kmail;, que se encontram no arquivo <filename >kmailrc</filename >). (Uma falha grande dessas não deveria acontecer, mas ainda assim pode ocorrer.)</para> </sect2> <sect2 id="hand-editing"> <title >Editando</title> <para >Assim, por que você mexeria nos arquivos de configuração? Bem, primeiro, é necessário se quiser obrigar o uso do modo KIOSK. Talvez um programador tenha lhe pedido para adicionar um item que o ajude a depurar um erro. Talvez queira recuperar de um problema sem ter que remover toda a pasta <filename class="directory" >.kde</filename >. Talvez queira aprender mais sobre os detalhes do &kde;.</para> <para >De qualquer forma, seja qual for a razão, você poderá desejar modificar manualmente um arquivo de configuração.</para> <para >Ao planejar editar um arquivo desses, certifique-se que o aplicativo que o usa não está rodando. Se for um dos arquivos de configuração básica, considere editar o arquivo enquanto o todo o &kde; não está rodando.</para> <para >Está pronto? Faça então uma cópia de segurança (já foi dito alguma vez?), inicie o seu editor favorito (assumiremos que neste caso é o &kate;), abra o arquivo (tenha o cuidado de carregá-lo como UTF-8, uma vez que que o &kate; exibe-o como <quote >utf8</quote >).</para> <para >Agora você terá um arquivo do tipo:</para> <programlisting >[Grupo] Chave1=Valor1 Chave2=Valor2 Chave3=Valor3</programlisting> <para >Você poderá agora modificá-lo (com cuidado!) e depois salvá-lo (certificando-se novamente que é <acronym >UTF-8</acronym >).</para> <para >Agora, você poderá testar o aplicativo e, se ele não se executar mais corretamente, feche-o e restaure a cópia de segurança.</para> <itemizedlist> <title >Informações Relacionadas</title> <listitem ><para ><xref linkend="kde-for-administrators"/> existem mais informações sobre a estrutura de pastas do &kde;, de modo a ajudá-lo a encontrar o arquivo que precisa de editar.</para> </listitem> </itemizedlist> </sect2> </sect1> <sect1 id="scripting-the-desktop"> <title >Programando o Ambiente de Trabalho</title> <para >O &kde; oferece um sistema de comunicação entre processos poderoso chamado &DCOP;, o Desktop COmmunication Protocol. Usando o &DCOP;, você pode controlar uma grande quantidade de funções do &kde; a partir da linha de comando ou a partir de um programa feito na sua linguagem de programação favorita. Você poderá também obter informações a partir das aplicações do &kde;: por exemplo, vários leitores multimídia do &kde; oferecem métodos para pesquisar por determinada informação no leitor sobre a faixa que está sendo tocada no momento.</para> <para >Falando de um modo abrangente, cada aplicação do &kde; oferece uma ou mais <firstterm >interfaces</firstterm > de &DCOP; que, por sua vez, oferecem métodos (ou, se preferir, funções) que outra aplicação poderá então invocar. Assim, o primeiro passo ao usar o &DCOP; é descobrir o método apropriado para a tarefa. A forma mais simples de fazer isto é com a interface <application >kdcop</application > para os métodos de &DCOP; disponíveis.</para> <para >Execute o <application >kdcop</application > a partir de um &konsole; ou da mini-linha de comando (a janela que aparece com o <keycombo action="simul" >&Alt;<keycap >F2</keycap > </keycombo >). A janela do <application >kdcop</application > mostra as aplicações que estão rodando no momento e que oferecem interfaces de &DCOP;, usando uma árvore para isso. De um modo geral, a escolha do método correto obriga a alguma pesquisa pela árvore, mas uma sugestão útil é que a interface marcada como <quote >(padrão)</quote >, contém normalmente as funções usadas com mais frequência.</para> <para >Para testar se a função faz o que desejamos, faça um duplo-clique por exemplo no ítem <guilabel >setColor</guilabel >. Para escolher a cor <varname >c</varname >, clique no botão de seleção de cores e escolha uma. Indique se a cor deverá ser a cor A com a opção para assinalar. Clique <guilabel >OK</guilabel > para ver a cor de fundo modificada.</para> <para >Para acessar ao método de &DCOP; a partir da sua linguagem de programação favorita, você poderá tanto usar as interfaces de &DCOP; existentes, se estiverem disponíveis no módulo 'tdebindings', ou então invocar a aplicação da linha de comando <command >dcop</command >. Para uma utilização simples, a invocação da aplicação da linha de comando <command >dcop</command > é suficiente. Para invocar um método de &DCOP; desta forma, é necessário indicar a aplicação e a interface que possui o método, o método em si e os argumentos, num formato adequado para a linha de comando.</para> <para >Nós especificamos a aplicação, a interface e o método exatamente nessa ordem, seguido dos argumentos pela mesma ordem que são apresentados no <application >kdcop</application >. O <command >dcop</command > possui muitas outras opções: dê uma olhada no resultado do <userinput ><command >dcop</command > <option >--help</option ></userinput >.</para> <para >Já chega de teoria: está na hora de um exemplo:</para> <example> <title >Um Programa de Mudança da Cor de Fundo com o &DCOP;</title> <para >Com a aplicação da linha de comando <command >dcop</command > e um pouco de Perl, vamos fazer então um pequeno programa que mude lentamente o fundo da tela, percorrendo o espectro de cores.</para> <para >Em primeiro lugar, nós procuraremos pelo método apropriado com o <application >kdcop</application >. Para este exemplo, encurtaremos a busca e iremos ao método diretamente: o método que desejamos é o <menuchoice ><guimenu >kdesktop</guimenu ><guisubmenu >KBackgroundIface</guisubmenu ><guimenuitem >setColor</guimenuitem > </menuchoice >. Os argumentos e o tipo do valor devolvido da função são mostrados com o estilo da linguagem C++. Para o caso do <methodname >setColor</methodname >, os argumentos são uma cor <varname >c</varname > que define a nova cor de fundo e um valor booleano ('true' ou 'false'), <varname >isColorA</varname >, que define se a cor é a primeira ou a segunda (isto é útil para definir gradientes, por exemplo).</para> <para >Para usar o método <methodname >setColor</methodname > na linha de comando, usaremos o seguinte: <screen ><prompt >%</prompt > <userinput ><command >dcop</command > kdesktop KBackgroundIface setColor '#ffffff' false</userinput > </screen> </para> <para >Para indicar a cor, é usado o valor RGB em hexadecimal, como é usado no &HTML;. Repare que ele está delimitado por aspas simples, para proteger o <token >#</token > da linha de comando.</para> <para >Para descobrir o valor RGB em hexadecimal de uma cor, abra qualquer janela de seleção de cores numa aplicação do &kde; (como, por exemplo, o &kcontrolcenter;, em <menuchoice ><guimenu >Aparência & Temas</guimenu ><guimenuitem >Cores</guimenuitem > </menuchoice >), selecione a cor que deseja e use o valor indicado no campo de texto <guilabel >HTML</guilabel >.</para> <para >Assim, isto é tudo que precisamos do &DCOP;; agora, é apenas necessário criar um programa em torno dele. Aqui está uma implementação (muito!) rudimentar: <programlisting ><![CDATA[ $min=49; # Valor mínimo da cor R, G ou B $max=174; # Valor máximo da cor R, G ou B $passo=5; # Quantidade a incrementar em cada passo e cor $espera=15; # Intervalo em segundos entre cada iteração @inicio = ($max, $min, $min); @cor = @inicio; while (1) { foreach (0..5) { my $qual = $_ % 3; # Qual a cor (R, G ou B) a alterar my $cima_baixo = $_ % 2; # Se deseja aumentar ou diminuir o valor do { if ($cima_baixo == 0) { $cor[$qual]+=$passo; } if ($cima_baixo == 1) { $cor[$qual]-=$passo; } my $chamada=sprintf "dcop kdesktop KBackgroundIface setColor '#%x%x%x' true\n", @cor; system($chamada); sleep $espera; } while (($cor[$qual] >= $min) and ($cor[$qual] <= $max)); } } ]]> </programlisting> </para> <para >Basta executar o programa sem argumentos, para que ele alterne a cor de fundo em um espectro bem definido, até que seja morto. <foreignphrase >Voilà</foreignphrase >!</para> </example> <para >Claro que o Perl não é a única linguagem que você poderá usar para fazer programas com o &DCOP;—se preferir o 'shell scripting', ele também está disponível:</para> <example> <title >Aplicando um fundo da Internet</title> <para >O seguinte programa obtém a imagem principal da tira de quadrinhos <quote >User Friendly</quote > e coloca-a como papel de parede da área de trabalho, usando as ferramentas normais disponíveis e um pouco de &DCOP;:</para> <programlisting ><![CDATA[ #!/bin/sh COMICURL=`wget -qO - http://www.userfriendly.org/static/index.html | \ grep Latest | sed -e "s,.*SRC=\",," -e "s,\" >.*,,"` TMPFILE=`mktemp /tmp/$0.XXXXXX` || exit 1 wget -q -O $TMPFILE $COMICURL dcop kdesktop KBackgroundIface setWallpaper $TMPFILE 1 ]]> </programlisting> <para >A primeira linha após o '#!/bin/sh' usa o <command >wget</command > e uma mágica das expressões regulares para extrair a localização da imagem do código em &HTML; da página principal. A segunda e terceira linhas irão obter a imagem e, finalmente, o <command >dcop</command > aplica a imagem transferida como papel de parede.</para> </example> <!-- <itemizedlist> <title >Related Information</title> <listitem ><para >to be written</para> </listitem> </itemizedlist > --> </sect1> <sect1 id="adding-extra-keys"> <title >Adicionando Atalhos de Teclado Extra para o &kde;</title> <para >Muitos teclados modernos contém teclas adicionais que não estão atribuídas por padrão a nenhuma ação.</para> <para >As teclas <quote >Multimídia</quote > geram normalmente um sinal e podem simplesmente ser escolhidas como uma combinação de teclas dentro de um aplicativo, como quem escolhe uma tecla qualquer. Algumas das teclas, todavia, não são detectadas e, pressionando-as no <guilabel >Configurar Atalhos</guilabel >, não acontecerá nada.</para> <para >Alguns portáteis da IBM, por exemplo, possuem teclas adicionais em torno dos cursores esquerdo e direito, e que parecem um <guiicon >Page Left</guiicon > e um <guiicon >Page Right</guiicon >.</para> <procedure> <step ><para >Use o <command >xev</command > para descobrir o código das teclas. Neste caso, são o 233 e o 234, respectivamente </para ></step> <step ><para >Escolha os símbolos das teclas. Existe alguns intervalos que não são usados por padrão, por isso muitos estão livres. Você poderá encontrar a lista em <filename >/usr/X11R6/include/X11/keysymdef.h</filename > (ou o equivalente no seu sistema).</para ></step> <step ><para >Crie um arquivo na sua pasta pessoal chamado <filename >.Xmodmap</filename > e adicione o seguinte a ele:</para> <screen >keycode 233 = Next_Virtual_Screen keycode 234 = Prev_Virtual_Screen</screen> </step> <step ><para >Execute o comando <userinput ><command >xmodmap</command > <filename >~/.Xmodmap</filename ></userinput ></para ></step> </procedure> <para >Neste momento, você deverá ser capaz de executar o <command >xev</command > novamente e ver que as teclas geram agora o símbolo da tecla que atribuiu. Você poderá agora atribuir esses símbolos a qualquer ação, como de costume.</para> <itemizedlist> <title >Informações Relacionadas</title> <listitem ><para >A página de manual do <command >xev</command >. Você poderá vê-la digitando <userinput >man:/xev</userinput > numa janela do &konqueror; ou digitando <userinput ><command >man</command > xev</userinput > num terminal.</para ></listitem> </itemizedlist> </sect1> <sect1 id="keys-for-scripts"> <title >Adicionando Combinações de Teclas às Ações Novas</title> <para >A maioria das ações do ambiente de trabalho ou dos aplicativos estão imediatamente disponíveis para poder associar-se uma combinação de teclas. Se a ação a que deseja atribuir um atalho foi criada por você ou ainda não esteja disponível, você poderá ainda assim atribuir um atalho.</para> <para >Para reunir as duas seções anteriores, talvez você queira atribuir uma tecla não usada do seu teclado a um programa ou comando de DCOP. O exemplo aqui será então atribuir as duas teclas que foram adicionadas em <xref linkend="adding-extra-keys"/> para ir para a área de trabalho virtual anterior ou a seguinte, ou seja, duas funções para as quais irá precisar do DCOP (tal como foi descrito em <xref linkend="scripting-the-desktop"/>.</para> <para >Isto pode ser conseguido facilmente com o seguinte método:</para> <procedure> <step> <para >Abra o &kcontrol; na seção <guilabel >Regional & Acessibilidade</guilabel >, e selecione <guilabel >Ações de Entrada</guilabel ></para> </step> <step> <para >Escolha <guibutton >Nova Ação</guibutton ></para> </step> <step> <para >Dê um nome à ação nova, ⪚ <userinput >Próxima Área de Trabalho Virtual</userinput ></para> </step> <step> <para >Selecione o <guilabel >Atalho de teclado -> Comando/URL(simples)</guilabel > para o <guilabel >Tipo de ação:</guilabel ></para> </step> <step> <para >Na página do <guilabel >Atalho do Teclado</guilabel >, clique no botão que deseja usar para disparar o comando. Para este exemplo, você iria pressionar a tecla com a imagem do <guiicon >Próxima Página</guiicon > nele. O <keysym >Next_Virtual_Screen</keysym > aparecerá na imagem da tecla.</para> </step> <step> <para >Na página do <guilabel >Configuração do Comando/URL</guilabel >, insira o comando a executar no campo: <userinput ><command >dcop twin default nextDesktop</command ></userinput ></para> </step> </procedure> <para >Repita os passos anteriores com a tecla <keysym >Prev_Virtual_Screen</keysym > key e a ação <userinput ><command >dcop twin default previousDesktop</command ></userinput >.</para> <para >Agora, pressionando as teclas <keysym >Prev_Virtual_Screen</keysym > ou <keysym >Next_Virtual_Screen</keysym >, mudará para a área de trabalho virtual anterior ou a próxima, respectivamente.</para> <para >Obviamente, você poderá atribuir qualquer tecla livre a qualquer ação.</para> <itemizedlist> <title >Informações Relacionadas</title > <listitem ><para >Veja a documentação do <application >KHotKeys</application > no &khelpcenter;, ou digitando <userinput >help:/khotkeys</userinput > numa janela do &konqueror;.</para ></listitem > <listitem ><para ><xref linkend="adding-extra-keys"/></para ></listitem> <listitem ><para ><xref linkend="scripting-the-desktop"/></para ></listitem> </itemizedlist> </sect1> <sect1 id="tdedebugdialog"> <sect1info> <authorgroup> <author ><personname > <firstname >Adriaan</firstname > <surname >de Groot</surname > </personname > <email >groot@kde.org</email > </author> </authorgroup> </sect1info> <title >&tdedebugdialog; - Controlando o Resultado da Depuração do &kde;</title> <sect2 id="tdedebugdialog-basic-usage"> <title >Utilização Básica</title> <para >O &tdedebugdialog; não está no &kmenu; por padrão. Você terá que executá-lo na linha de comando ou na mini-janela de execução de comandos com <userinput ><command >tdedebugdialog</command ></userinput >. O &tdedebugdialog; mostra uma janela com uma lista grande de áreas de depuração. Cada área tem uma opção que você poderá ligar ou desligar para ativar ou desativar o resultado de depuração dessa parte do &kde;.</para> <para >A lista de áreas de depuração vem ordenada numericamente, não alfabeticamente, assim o tdeio (127) vem antes do artskde (400). Os números vão até perto de 200 000, mas normalmente só existem 400 áreas. Você não terá que percorrer a lista completa para encontrar a área que precisa. Existe um campo de texto no topo da janela, onde poderá inserir uma parte do nome da área que deseja. A lista de itens que é apresentada é filtrada de modo a incluir apenas as áreas de depuração que contém o texto que introduziu, ⪚ se inserir <userinput >k</userinput > não irá filtrar muito mas, se indicar <userinput >kont</userinput >, deverá aparecer apenas as áreas de depuração do &kontact;. Como uma forma mais rápida de ativar ou desativar o resultado de depuração, existe também os botões para <guibutton >selecionar tudo</guibutton > e <guibutton >deselecionar tudo</guibutton >, que fará com que o &kde; produza muitos dados de depuração, ou quase nenhum.</para> </sect2> <sect2 id="tdedebugdialog-fullmode"> <title >O TDEDebugDialog no modo completo</title> <!-- this text partly taken from the tdedebugdialog handbook --> <para >No modo completo, que é o que irá obter ao executar o TDEDebugDialog como <userinput ><command >tdedebugdialog</command > <option >--fullmode</option ></userinput >, fica disponível a mesma lista de áreas de depuração, podendo selecionar apenas uma de cada vez numa lista. Você poderá então definir o resultado para os vários tipos de mensagens: Informação, Aviso, Erro e Erro Fatal. Para cada um destes tipos, você poderá escolher para onde são enviadas as mensagens. As opções são:</para> <para >Arquivo, onde terá que inserir o nome de um arquivo. Ele será escrito na sua pasta $<envar >HOME</envar >.</para> <para >Caixa de Mensagem. Cada mensagem de depuração é mostrada num diálogo de informação, que você terá que pressionar <guibutton >OK</guibutton > para continuar com o aplicativo.</para> <para >Linha de Comando, a entrada padrão. As mensagens são impressas no 'stderr' e irão aparecer tanto na janela da linha de comado em que a aplicativo foi iniciado, como no <filename >.xsession-errors</filename >.</para> <para >Syslog. Isto envia cada mensagem de depuração para a funcionalidade de registro do systema ('syslog'), que poderá efetuar um processamento prévio da mensagem.</para> <para >Nenhum. Isto elimina o resultado deste tipo de mensagem.</para> <para >Para as mensagens geradas pelos erros fatais, é normalmente uma má idéia escolher o Nenhum ou o Syslog, uma vez que em ambos os casos poderá não ver a mensagem e o aplicativo que obtenha o erro fatal irá desaparecer sem deixar uma razão do seu desaparecimento. Se o aplicativo desaparecerá ou não no caso de um erro fatal, poderá ser definido na opção <guilabel >Abortar nos erros fatais</guilabel >, que está assinalada por padrão — mas você poderá esperar ainda que um aplicativo estoure (de forma confusa) se for encontrado ainda um erro.</para> <!-- Add links to "further reading" here --> <!-- <itemizedlist> <title >Related Information</title> <listitem ><para >to be written</para> </listitem> </itemizedlist >--> </sect2> </sect1> </chapter> <!-- Keep this comment at the end of the file Local variables: mode: xml sgml-omittag:nil sgml-shorttag:nil sgml-namecase-general:nil sgml-general-insert-case:lower sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:0 sgml-indent-data:true sgml-parent-document:("index.docbook" "book" "chapter") sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: -->