Definindo aplicativos padrão diferentes para diferentes ambientes de desktop

9

Estou usando o Ubuntu 12.04 com a interface padrão do Unity. Eu instalei depois a área de trabalho do KDE, XFCE, LXDE, gnome-shell e Cinnamon.

O KDE vem com aplicativos padrão diferentes do Unity, como

  • kwrite para edição de texto,
  • konsole como terminal virtual,
  • kfontview para visualização e instalação de fontes,
  • dolphin como navegador de arquivos, etc.

Outros DE vêm com alguns outros aplicativos padrão.

O problema surge quando você deseja abrir um arquivo, como um arquivo de texto, com o qual ambos podem ser abertos por gedit e kwrite , eu quero usar kwrite no KDE e gedit no Unity ou Gnomo. Mas não há como definir isso. Eu posso definir o aplicativo padrão para o arquivo de texto alterando as respectivas configurações tanto no KDE quanto no Unity, mas ele se torna padrão para ambos os DE.

Por exemplo, se eu definir kfontviewer como aplicativo de exibição de fonte padrão no KDE, ele também abrirá fontes quando eu estiver no Unity ou no Gnome e vice-versa. Isso é um problema porque carregar outro programa de DE leva muito tempo do que o padrão para o DE usado.

Minha pergunta é: Posso usar diferentes aplicativos padrão para diferentes DE? Como?

    
por Anwar 01.09.2012 / 14:29

2 respostas

5

Eu juntei esta solução para resolver o seu problema, e testei-a no KDE e no XFCE com a abertura de arquivos de texto e arquivos de fontes. É uma solução genérica que deve ser aplicável a qualquer número de ambientes de desktop e tipos MIME. A maneira como funciona é que existe um script python simples chamado custom-open que abre um arquivo usando diferentes aplicativos para diferentes ambientes de desktop. Estas são as etapas para configurar a solução:

  1. salve o script aberto no seu computador, de preferência no seu caminho, mas não precisa ser.
  2. salve .custom-open.ini no seu diretório pessoal ~ / .custom-open.ini
  3. defina o recurso de abertura personalizada como o aplicativo padrão para qualquer tipo de arquivo que você queira manipular.

custom-open

#!/usr/bin/env python
import traceback, sys, os, ConfigParser, os.path
from subprocess import Popen, check_output
from gtk import MessageDialog, MESSAGE_ERROR, BUTTONS_CLOSE

try:
    file, desktop = sys.argv[1], os.environ['DESKTOP_SESSION']
    mime = check_output(['file', '--mime-type', file]).strip().split(': ')[1]
    config = ConfigParser.RawConfigParser()
    config.read(os.path.expanduser('~/.custom-open.ini'))
    cmd = config.get(desktop, mime)
    Popen([cmd] + sys.argv[1:])
except:
    msg = "CUSTOM OPEN ERROR\n\n" + traceback.format_exc()
    MessageDialog(None, 0, MESSAGE_ERROR, BUTTONS_CLOSE, msg).run()

.custom-open.ini

[gnome]
text/plain = gedit
application/x-font-ttf = gnome-font-viewer

[xubuntu]
text/plain = leafpad
application/x-font-ttf = gnome-font-viewer

[kde-plasma]
text/plain = kate
application/x-font-ttf = kfontview

O que é ótimo nessa solução é que você pode adicionar quantos novos ambientes de área de trabalho você quiser e quantos tipos de mime quiser. Para verificar o nome que você deve fornecer para o ambiente de área de trabalho, execute o comando abaixo em um terminal.

env | grep -i DESKTOP_SESSION

para verificar o tipo mime exato de um arquivo que acabou de ser executado:

file --mime-type filename

EDITED: A necessidade de links simbólicos foi removida, isso deve facilitar o uso. Eu também adicionei um manipulador de erro gráfico que exibirá um alerta se ocorrer um erro.

    
por Marwan Alsabbagh 04.10.2012 / 15:53
2

Se você não encontrar a maneira "certa" de fazer isso, use um método de força bruta como:

  1. Defina todos os padrões em um ambiente de área de trabalho
  2. Faça algo como cd $HOME;ls -Rlrt | less para descobrir quais arquivos foram atualizados, ou seja, onde essas opções foram salvas
  3. Faça uma cópia separada desses arquivos para cada ambiente de área de trabalho (backup).
  4. Repita para cada ambiente de área de trabalho
  5. Copie o conjunto apropriado antes de alternar para esse ambiente de área de trabalho (provavelmente efetuando logout e login novamente e selecionando o novo ambiente de área de trabalho).

Espero que haja uma maneira de alternar os ambientes de área de trabalho a partir de um script de shell com a opção de informar ao ambiente de área de trabalho de onde obter seus arquivos de configuração. Isso pode ser mais limpo do que mover arquivos o tempo todo, mas eu não pesquisei se ou como isso funciona.

Outra solução muito mais simples, mas não exatamente o que você pediu, seria:

  1. Crie contas de usuário separadas para cada ambiente de área de trabalho
  2. Crie um novo grupo para esses usuários
  3. Adicione todos esses usuários ao novo grupo
  4. Faça os arquivos de dados comuns que você precisa acessar de todos esses usuários -rwxrwxr-x ( chmod 775 list-of-files-and-directories ). Dessa forma, você não receberá erros de permissão ao tentar gravar em um arquivo que outro de seus "usuários" escreveu primeiro.

    • Se você quiser que alguns arquivos sejam os mesmos em todos esses usuários, crie-os em um usuário e crie links simbólicos para o restante deles. Isso deve funcionar, mas exigirá que você se lembre de que eles estão configurados dessa forma quando você alterar algum deles. Por exemplo, se você editar um deles e seu editor criar um arquivo de backup, esse arquivo de backup só será salvo onde você o editou, e não em todas as outras contas de usuário.
por Joe 05.09.2012 / 21:52