KDE - executa comandos específicos em uma área de trabalho específica na inicialização

2

Eu trabalho muito em muitos documentos ao mesmo tempo. Basicamente tenho 3-5 espaços de trabalho utilizados, sempre com os mesmos arquivos - terminal aberto em pasta particular, gedit com arquivo particular e evidencia para ver o resultado (uso latex). Aqui está a questão - como automatizar o processo de abertura de arquivos? O que eu gostaria é de iniciar o Ubuntu com gedit e evince aberto no meu trabalho.

Por algum tempo, o KDE tentou abrir os últimos programas salvos, mas funcionou mal - recebi o gedit e evidenciei a abertura com arquivos em branco.

Eu já vi alguns artigos sobre devilspie (não minha maneira designada, eu quero obter um comando particular, não apenas abrir o firefox no espaço de trabalho 2) e executar comandos na inicialização (parece melhor, mas ainda não sei como dizer terminal sobre espaços de trabalho).

    
por Cheshire Cat 12.11.2014 / 19:54

2 respostas

0

1) Instale wmctrl

sudo apt-get install wmctrl

2) Crie um arquivo com o seguinte conteúdo e torne-o executável

#!/bin/bash
wmctrl -s 0 #Switches to workspace 0 [workspaces are numbered from 0]
gnome-terminal & #Say you want a terminal in the 0th workspace
nautilus & #Maybe a file browser too
sleep 2 #Windows take some time to open. If you switch immediately, they'll open up in wrong workspaces. May have to change the value 2.
wmctrl -s 1 #Switches to workspace 1
firefox & #You get the idea. Continue for all workspaces
sleep 2
wmctrl -s 0 #You will be left at this workspace when the script finishes executing

3) Chame esse script de .xsessionrc no seu diretório pessoal [se você tiver que criar este arquivo] para automatizar o processo em cada login. Ou você pode apenas chamá-lo de um terminal quando necessário. EDIT: colocá-lo em "aplicativos de inicialização", não .xsessionrc. O .xsessionrc será executado mesmo antes do carregamento do ambiente de área de trabalho.

Você pode querer criar um xsession personalizado para que você tenha duas sessões para escolher, uma que abra esses aplicativos automaticamente e outra que não. Mas isso parece desnecessário para mim.

Se você acha que mudar para um espaço de trabalho, abrir aplicativos apropriados e alternar para o próximo consome tempo, é possível abrir todos os aplicativos de uma só vez e, em seguida, mover as janelas usando wmctrl . Por exemplo

wmctrl -r 'Firefox' -t 1

mudará uma janela com o Firefox em seu título para o espaço de trabalho 1. Se houver mais de uma janela, a primeira na lista de janelas gerenciadas por wmctrl será movida. Você precisará saber o título das janelas que serão criadas pelos aplicativos para usar isso. É por isso que não sugeri isso como a principal opção. Se os títulos não forem ambíguos, como é o caso dos aplicativos mais usados, esse é o caminho a seguir.

Abertura de aplicativos em tela cheia:

Alguns aplicativos, como o gnome-terminal, possuem argumentos de linha de comando para abrir uma janela no estado maximizado ou no modo de tela cheia. Se tais opções existem, use-as. Caso contrário, use wmctrl da seguinte forma

wmctrl -r 'username@machinename' -b add,maximized_vert,maximized_horz

Isso maximiza minha janela de terminal (já existente).

wmctrl -r 'username@machinename' -b add,fullscreen

Isso envia a janela para o modo de tela cheia.

Acesse a página de manual do wmctrl . Você pode usar para mais de sua funcionalidade.

Esta resposta foi tirada de esta fonte .

    
por Rohith Madhavan 19.11.2014 / 15:05
0

Não consegui encontrar uma maneira consistente de abrir programas para uma pesquisa pontual específica. Parece não haver uma maneira direta de vincular um comando a sua janela. Então eu escrevi uma pequena função bash que usa uma combinação de wmctrl e sleep para identificar e posicionar uma janela.

Esta função tira proveito do fato de que a última janela criada aparece por último nas listagens do wmctrl. Por causa da natureza hacky de combinar wmctrl e sleep para identificar janelas, não posso abordar isso sendo usado em um script de inicialização. Eu duvido que funcionaria.

A função

position_program ()
{
     &
    sleep 
    window_id='wmctrl -l | tail -n1 | cut -f1 -d " "'
    wmctrl -ir $window_id  -e 0,
    if [ ! -z "" ]; then
        wmctrl -ir $window_id -t 
    fi
}

O argumento 1 deve ser o comando para executar, entre aspas.

O argumento 2 é o tempo de espera. O script precisa saber quanto tempo aguardar entre quando um comando é executado e quando a janela realmente aparece.

O argumento 3 é uma especificação de geometria de x, y, altura e largura. Você pode usar o comando

xwininfo | grep geometry

para ajudá-lo a obter valores adequados para isso. (execute o comando, clique na janela com a geometria desejada)

O argumento 4 é estruturado para ser opcional e adicionado em resposta à sua pergunta. É preciso um inteiro representando qual área de trabalho mover a janela. A enumeração começa com 0, portanto, sua primeira área de trabalho é 0, 2ª a 1 e assim por diante

Exemplo

#! /bin/dash
position_program ()
{
     &
    sleep 
    window_id='wmctrl -l | tail -n1 | cut -f1 -d " "'
    wmctrl -ir $window_id  -e 0,
    if [ ! -z "" ]; then
        wmctrl -ir $window_id -t 
    fi
}

# open gedit, position to the upper left corner, sized as 1000x1000
position_program  "gedit --new-window my_text.txt" 1 "0,0,1000,1000" 0

#open another gedit window, same as before but on desktop 2
position_program  "gedit --new-window my_othertext.txt" 1 "0,0,1000,1000" 1

A quantidade de sono pode variar entre diferentes programas, obviamente. Mais interessante, também pode variar se você usar o mesmo programa uma segunda vez, mas para uma nova janela. Então, a experimentação pode às vezes ser necessária.

Espero que você possa ver como o script funciona e, talvez, editá-lo ou reutilizá-lo conforme necessário. Eu testei em lubuntu e kubuntu, e ele deve funcionar em outros ambientes baseados em x também.

    
por user7134 20.11.2014 / 00:35