Definindo aplicativos padrão diferentes para diferentes ambientes da área de trabalho

9

Estou usando o Ubuntu 12.04 com interface padrão do Unity. Instalei mais tarde 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 gedite kwrite, eu quero usar kwriteno KDE e geditno Unity ou Gnome. Mas, não há como definir assim. Eu posso definir o aplicativo padrão para o arquivo de texto alterando as configurações respectivas no KDE e no Unity, mas ele se torna o padrão para o DE.

Por exemplo, se eu definir kfontviewercomo aplicativo padrão de visualização de fontes no KDE, ele também abre as fontes quando estou no Unity ou no Gnome e vice-versa. Isso é um problema porque, carregar o programa de outros DE leva muito tempo que o programa padrão para o DE usado.

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

Anwar
fonte

Respostas:

5

Reunimos esta solução para resolver seu problema e a testei no KDE e no XFCE com a abertura de arquivos de texto e arquivos de fonte. É 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 de abertura personalizada que abrirá um arquivo usando aplicativos diferentes para diferentes ambientes de desktop. Estas são as etapas para configurar a solução:

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

abertura personalizada

#!/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

portanto, o melhor dessa solução é que você pode adicionar quantos novos ambientes de desktop quiser e quantos tipos de mímica desejar. Para verificar qual nome 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, execute:

file --mime-type filename

EDITADO: A necessidade de links simbólicos foi removida, facilitando o uso. Também adicionei um manipulador de erro gráfico que exibirá um alerta se ocorrer um erro.

Marwan Alsabbagh
fonte
1
Obrigado pela sua resposta. Eu segui seus passos e criei todos os scripts, links e arquivos correspondentes. Sua solução funciona muito bem na linha de comando e tem o desempenho anunciado. Mas quando tento definir o script (ou melhor, o link simbólico) como o aplicativo padrão para abrir um tipo de arquivo específico, ele falha e volta ao padrão secundário. Não sei se estou fazendo algo errado.
Glutanimate
Aqui está como eu defini o script como o aplicativo padrão: 1.) crie um launcher ( co.desktop) com Exec=/home/user/.scripts/Customization/Defaultapps/custom-open-text~ / .local / share / applications. 2.) Editar ./local/share/applications/mimeapps.liste adicionar a seguinte associação padrão: text/plain=co.desktop. Encontrou algum erro neste procedimento?
Glutanimate
1
ok experimente a nova versão, fiz algumas melhorias para facilitar o uso. Também adicionei o manipulador de erro gráfico; agora, ele deve exibir um alerta com a mensagem de erro. Tente novamente e poste a mensagem de erro em um comentário, se ainda não funcionar. Você também pode mencionar qual versão do Ubuntu e qual ambiente de desktop você experimentou.
Marwan Alsabbagh
Ele funciona e o faz de maneira fantástica (usando LXDE / Unity)! Sua solução merece cada último ponto dessa recompensa. Muito obrigado por reservar um tempo para fazer isso. (PS: Eu ainda acho que uma função como esta deve vir com Ubuntu por padrão DE-hopping pode não ser prática popular mas é o suficiente comum para justificar uma solução oficial..)
Glutanimate
1
Sinto muito, mas não sou o OP, apenas estabeleci a recompensa. O @Olive Twist terá que marcar sua própria pergunta como respondida.
perfil completo de Glutanimato
2

Se você não encontrar a maneira "certa" de fazê-lo, poderá usar 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 um cd $HOME;ls -Rlrt | lesspara 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 (com backup).
  4. Repita para cada ambiente de desktop
  5. Copie o conjunto apropriado no local imediatamente antes de mudar para esse ambiente de área de trabalho (provavelmente efetuando logout e logon novamente e selecionando o novo ambiente de área de trabalho).

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

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

  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 todos 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 gravar em um arquivo que outro dos seus "usuários" escreveu primeiro.

    • Se você deseja que alguns arquivos sejam iguais entre todos esses usuários, é possível criá-los em um usuário e vinculá-los novamente ao restante deles. Isso deve funcionar, mas exigirá que você se lembre de que eles estão configurados dessa maneira quando você alterar qualquer um deles. Por exemplo, se você editar um deles e seu editor criar um arquivo de backup, esse arquivo de backup será salvo apenas onde você o editou, e não em todas as outras contas de usuário.
Joe
fonte
Você pode notar que por usuário associações de arquivos são armazenados~/.local/share/mime/
RobotHumans