Pages

Sunday, January 03, 2010

Embutindo um terminal no desktop do KDE

Antes de começar a ler saiba que essa dica funciona apenas no KDE e não tenho certeza sobre a compatibilidade em outras versões de KDE, que não a 4. Para outros ambientes, tente essas instruções ou essa outra em português.

O objetivo é fazer o terminal ficar embutido de forma elegante no desktop. Há um figura no final desse texto mostrando o que isso significa.

Primeiro passo é escolher o terminal que será utilizado. Por incrível que pareça o terminal que selecionei é o gnome-terminal. Por que usar o gnome-terminal no KDE ? Eu prefiro dizer o porque não usar o konsole no KDE para esse objetivo. Como eu vou embutir o terminal no desktop, eu preciso remover todos os elementos de menu e borda e eu não sei como fazer isso com qualquer terminal (a borda é fácil, o problema é o menu e a barra de rolagem). Além disso, eu vou especificar o comportamento padrão do programa travando uma série de funcionalidade que não permitirá o uso adequado desse programa de outra forma. Em outras palavras, eu vou sacrificar um programa para um objetivo. Se eu fizer isso com o Konsole eu vou ter inúmeros problemas.

O menu que usualmente é utilizado para essa função é o Eterm. O problema do Eterm é que eu quero que ele seja transparente, contudo, eu não consegui definir uma transparência verdadeira no Eterm, tudo que é possível fazer funcionaria perfeitamente se meu desktop não fosse um slide show. Assim, sobrou para o gnome-terminal. Algo que eu nunca usaria tradicionalmente dentro do KDE. Tudo que for feito aqui não interferirá no modo que o programa funcionará dentro do GNOME ou outro gerenciador, eu posso sacrificar o gnome-terminal tranquilamente.

Então, caso você não tenha um wallpaper como slide show pode adaptar essa dica para usar o Eterm, terá de trocar os nomes de gnome-terminal para Eterm e as opções que serão ativadas no gnome-terminal (detalhes do comando, você pode ler aqui).

Uma dúvida interessante que pode surgir é quanto ao desempenho e/ou consumo de memória. A memória consumida por esse terminal é insignificante. O desempenho de abrir o programa não é do mais brilhantes, mas é mais porque estou iniciando todo o desktop ao mesmo tempo que esse programa do que por causa do terminal em si. Resumindo, não há consumo perceptível de recursos do computador.

Primeiro passo, criar um script para iniciar o gnome-terminal ao iniciar o KDE.

Eu criei um script com o seguinte conteúdo
#!/bin/bash
# File: gnome-terminal.sh
# Author: J. F. Mitre
# Created: Seg 21 Dez 2009 19:32:51 BRST
# NOTES: iniciar o gnome-terminal no kde

kstart --desktop 1 --onbottom --skiptaskbar --skippager \
gnome-terminal --geometry 80x18+20+660 \
--profile=DesktopConsole \
-e "sh $HOME/.kde4/confAutostart/gnometerminalinit.sh"
O gnome-terminal é iniciado com o tamanho de 80x18 e na posição +20+660. Isso foi feito para ele ficar no canto inferior a esquerda de uma tela de 1280x1024. O profile DesktopConsole foi criado especialmente para esse objetivo, assim como o arquivo gnometerminalinit.sh.

Esse arquivo, salvo com o nome gnome-terminal.sh, está localizado em $HOME/.kde4/Autostart/. Em algumas distribuições o diretório de configuração do KDE é .kde e não .kde4, substitua se for o seu caso. Não se esqueça de marcar o script gnome-terminal.sh como executável (no terminal: chmod +x gnome-terminal.sh).

O comando kstart permite configurar algumas opções da janela. Essa opções também serão definidas de outra forma. Eu defini essas opções nos dois lugares, pois acredito que um bug esteja atrapalhando o funcionamento adequado das configurações quando marcadas apenas em um único lugar e não há mal algum em usar o kstart. Para mais detalhes digite: kstart --help-all

Outro detalhe desse comando é quanto a largura de 80 px do terminal. Esse valor é importante, pois com menos alguns programas podem se recusar a trabalhar informando que não há largura suficiente para a execução. E nem precisa ser um comando complicado, o comando "w" não funciona com 70 px de largura.

Também note a existência da barra invertida no script. Após a barra, não pode ter caracteres, nem mesmo espaço.

O arquivo gnometerminalinit.sh tem o seguinte conteúdo:
#!/bin/bash
# File: gnometerminalinit.sh
# Author: J. F. Mitre
# Created: Seg 21 Dez 2009 19:27:51 BRST

export VARTERM=gnome-terminal
bash
O objetivo desse arquivo é criar a variável $VARTERM apenas nessa execução específica do gnome-terminal. Esse arquivo NÃO é executável, é um arquivo comum, coloquei a extensão .sh apenas para lembrar a funcionalidade. Esse arquivo foi colocado no diretório $HOME/.kde4/confAutostart/, esse diretório não é padrão do sistema, então deve ser criado. Coloquei ali apenas para não misturar com outros arquivos do computador e por acreditar que esse nome é muito simples e de fácil correlação com o objetivo do seu conteúdo.

O perfil DesktopConsole foi inspirado nas instruções dessa página.
Crie um novo perfi e dele a ele o nome de "DesktopConsole".
  • Na aba "Geral" desmarque a opção "Mostrar barra de menu por padrão em novas janelas"
  • Na aba "Rolagem" defina "Barra de rolagem está:" como "desabilitada"
  • Na aba "Efeitos" configure o background do aplicativo. Eu uso "Fundo Transparente" e transparência quase zero, para permitir apenas uma sombra na tela.
Salve o perfil e não defina ele como padrão, assim o gnome-terminal continuará intocável dentro do GNOME.

Agora abra as configurações do sistema e selecione "Comportamento da Janela". Nesse item, selecione "Específica da Janela". Selecione "Novo..." e configure as abas conforme estão nas figuras abaixo (clique nas imagens para ampliar).





Agora veja o resultado final...


Viu o desktop na parte inferior a esquerda ? Não confunda com a região de notas que está na parte superior também a esquerda.

Mas ainda não acabou. Lembra que criamos um script apenas para definir a variável $VARTERM apenas para esse pequeno terminal ?
Agora é a hora de usar esse recurso. No meu ~/.bashrc eu tenho o seguinte conjunto de linhas:
if [ "$VARTERM" == "gnome-terminal" ]; then
unalias exit
alias exit='clear'
alias reload="source $HOME/.bashrc"
alias Restart='$HOME/.kde4/Autostart/gnome-terminal.sh; unalias exit; exit'
fi
Para mim essa foi a "cereja do bolo" dessa configuração. Até então, se eu digita-se exit por engano, eu fecharia o terminal. O que esse pedaço de código faz é redefinir o que significa exit para clear. Mas não é somente isso, qualquer coisa que eu queria definir apenas para aquele pequeno terminal eu posso colocar dentro desse condicional. Dessa forma, eu posso produzir efeitos diversos, como o comando "reload" que me permite recarregar o .bashrc. E o comando Restart para reiniciar o aplicativo sem precisar abrir outro terminal.

Conclusão
Para quem usa muito o terminal, sempre há comandos curtos a serem executados. Iniciar um serviço, parar um serviço, montar ou desmontar um dispositivo ou volume encriptado, chamar um programa rapidinho, etc. Ter o terminal no desktop, assim, no cantinho e de forma elegante, é um meio termo entre o visual e a disponibilidade e um aumento de produtividade.

Contudo, nada impede que o terminal tome uma parte maior da tela, tenha um fundo preto, etc. Cada um pode buscar o melhor conceito visual para seu próprio computador. O que posso dizer é que estou muito feliz com o resultado final alcançado.

Por fim, eu configurei o meu KDE para sempre iniciar com uma sessão vazia. Não faço idéia de quais seriam as conseqüências de salvar a sessão. Ainda assim, acredito que quem fizer isso e colocar o "gnome-terminal" como um aplicativo a ser excluído da sessão, não terá qualquer problema.

9 comments:

  1. meu preciso embutir o terminal no desk mas fiz todos os passos da sua dica e não deu certo pode passar um tuto mais detalhado passom a passo valeu fico no aguardo abraço

    ReplyDelete
  2. Meu caro, é dificílimo, para não dizer impossível dizer o que deu errado no seu caso.

    Não há mais o que detalhar nesse texto. Se tiver uma dúvida específica, esclareça e tentarei resolver.

    Do mais, posso sugerir apenas que verifique coisas como: qual é o diretório do seu KDE, ~/.kde ou ~/.kde4 ? Isso depende da distro.

    Como pode observar na nota que escrevi no texto "Em algumas distribuições o diretório de configuração do KDE é .kde e não .kde4, substitua se for o seu caso."

    Outra coisa é verificar se o script está digitado corretamente. Para isso é útil executar o script e ver se aparece alguma mensagem de erro.

    Ah! Desde que eu escrevi esse texto até hoje, eu uso a mesma dica, mas o kstart me dá um mensagem de erro que eu o ignoro solenemente por nada influir na execução.

    ReplyDelete
  3. obrigado vc estava certo era kde e não kde4 falta de atenção minha obrigado muito boa a dica valeu

    ReplyDelete
  4. Anonymous9/8/11 08:12

    Bom dia Mitre!
    Instalei a pouco tempo o Debian 6.0.2 e gostei muito da ideia de colocar um terminal fixo no desktop. Segui todos os passo que vc indicou. O que ocorre no meu sistema é que a fazer login o gnome-terminal abre e fecha. reli o texto varias vezes conferi todos os passos e permanece do mesmo jeito. vc teria alguma ideia para mim. Desde já agraceço. Bom dia! Davidson.

    ReplyDelete
  5. Davidson,
    O Debian tem sempre aquele problema de ser meio "antigo" em relação a versões, mas podemos tentar...

    O meu primeiro passo seria executar o script, que embute o terminal no desktop manualmente, chamando-o a partir do Konsole, depois de ter logado.

    O segundo teste é usar um .bashrc "limpo" sem configurações quaisquer (dentre as suas ou as sugeridas nesse texto) para saber se ali não está o problema. Particularmente, eu faria o teste primeiro sem a configuração que sugiro nesse texto e se não der certo, com um .bashrc novo ! Um apóstrofo errado e o exit está sendo executado ao invés de "redefinido".

    Dando certo ou não, responda por aqui para aprendermos um pouco mais sobre essa característica !

    Um abraço

    ReplyDelete
  6. Anonymous11/8/11 10:16

    bom dia ao tentar executar o script surgiu a seguinte resposta:
    dsa@davidson:~/.kde/Autostart$ ./gnome-terminal.sh
    kstart(2567) main: Omitting both --window and --windowclass arguments is not recommended

    Desculpe meus conhecimentos no linux ainda são um pouco limitados. Sera que isso ajuda?

    ReplyDelete
  7. Bom, você pode usar:
    kstart --desktop 1 --window --onbottom --skiptaskbar --skippager \
    gnome-terminal --geometry 80x18+20+660 \
    --profile=DesktopConsole \
    -e "sh $HOME/.kde4/confAutostart/gnometerminalinit.sh"

    E ver o que acontece.
    Mas quando você inicia dessa forma, você consegue ver o terminal se abrir ?
    Você está utilizando os alias no .bashrc ?

    E uma última pergunta por hora: o que acontece se você tentar executar

    gnome-terminal --geometry 80x18+20+660 \
    --profile=DesktopConsole

    no terminal ?

    ReplyDelete
  8. Anonymous17/8/11 10:10

    Bom dia Mitre!
    Desculpe ter desaparecido. Pois bem vamos lá. Fiz vários testes e vamos ver o que vc acha. Primeiro usei o .bashrc de três formas diferente um vazio, o outro sem as alterações que vc sugeriu e terceiro apenas com as alterações sugeridas. Em todos os casos quando reinicializo o sistema a janela gnome-terminal abre e fecha.
    Vamos agora ao segundo comentário. Fiz a alteração sugerida acrescentando --window ao script. Ao inicializar o computador ocorre a mesma coisa o terminal abre e fecha nos desktop. Quando executo o script no terminal ($./gnome-terminal.sh) não retorna nem um erro e vc tinha razão o terminal abre e fecha no desktop novamente. Quando eu executo o comando $gnome-terminal --geometry 80x18+20+660 \--profile=DesktopConsole o gnome-terminal se abre no desktop. Porem ele só permanece aberto se o konsole, o qual eu executei o comando, também estiver aberto. caso eu feche o konsole o terminal gnome fecha também. Agradeço a paciência.
    Davidson

    ReplyDelete
  9. Davidson,
    o erro que você possui está no comando kstart.
    Digo isso, porque é natural que a janela do terminal feche se o konsole que a executou for fechado.
    Sendo assim, o que eu posso dizer é tentar adicionar, remover opções do kstart, pois aí está seu problema.

    Minhas opções atuais são:

    kstart --desktop 1 --onbottom --skiptaskbar --skippager

    a sequencia do comando é o programa que quer executar.

    então, sugiro que digite: kstart --help
    veja se essas opções existem ou não (pode depender da versão do KDE) e corrija o que achar que deve corrigir.

    Comece com o básico:

    kstart --desktop 1

    E vá acrescentando opções até resolver o problema (ou removendo caso justo --desktop 1 seja o problema).

    Ah ! Recebi seu comentário com o .bashrc completo, mas não vi nada ali que pudesse justificar o problema. Não irei publicar essa parte do comentário por não achar que ela acrescenta alguma coisa, afinal, não há problema no .bashrc, então, o que poderia ajudar...

    Um abraço e boa sorte nos novos testes.

    ReplyDelete