Establecer diferentes aplicaciones predeterminadas para diferentes entornos de escritorio

9

Estoy usando Ubuntu 12.04 con la interfaz predeterminada de Unity. Luego instalé el escritorio KDE, XFCE, LXDE, gnome-shell y Cinnamon.

KDE viene con diferentes aplicaciones predeterminadas que Unity, como

  • kwrite para editar texto,
  • konsole como terminal virtual,
  • kfontview para ver e instalar fuentes,
  • dolphin como navegador de archivos, etc.

Otros DE vienen con algunas otras aplicaciones predeterminadas.

El problema surge cuando desea abrir un archivo como un archivo de texto, con el que ambos pueden abrirse gedity kwritequiero usar kwriteen KDE y gediten Unity o Gnome. Pero, no hay forma de establecer así. Puedo configurar la aplicación predeterminada para el archivo de texto cambiando las configuraciones respectivas en KDE y Unity, pero se vuelve predeterminada para ambos DE.

Por ejemplo, si configuro kfontviewercomo aplicación de visualización de fuente predeterminada en KDE, también abre fuentes cuando estoy en Unity o Gnome y viceversa. Esto es un problema porque, cargar el programa de otro DE toma mucho tiempo que el predeterminado para el DE usado.

Mi pregunta es: ¿Puedo usar diferentes aplicaciones predeterminadas para diferentes DE? ¿Cómo?

Anwar
fuente

Respuestas:

5

He reunido esta solución para resolver su problema, y ​​lo probé en KDE y XFCE con archivos de texto y archivos de fuentes abiertos. Es una solución genérica que debería ser aplicable a cualquier cantidad de entornos de escritorio y tipos MIME. La forma en que funciona es que hay un script de Python simple llamado custom-open que abrirá un archivo usando diferentes aplicaciones para diferentes entornos de escritorio. Estos son los pasos para configurar la solución:

  1. guarde la secuencia de comandos de apertura personalizada en su computadora, preferiblemente en su ruta, pero no tiene que ser así.
  2. guarde .custom-open.ini en su directorio de inicio ~ / .custom-open.ini
  3. configure custom-open como la aplicación predeterminada para cualquier tipo de archivo que desee manejar.

personalizado abierto

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

Entonces, lo bueno de esta solución es que puede agregar tantos entornos de escritorio nuevos como desee y tantos tipos de MIME como desee. para verificar qué nombre debe proporcionar para el entorno de escritorio, ejecute el siguiente comando en un terminal.

env | grep -i DESKTOP_SESSION

para verificar el tipo mime exacto de un archivo simplemente ejecute:

file --mime-type filename

EDITADO: La necesidad de enlaces simbólicos se ha eliminado, esto debería facilitar su uso. También he agregado un controlador gráfico de errores que mostrará una alerta si se produce un error.

Marwan Alsabbagh
fuente
1
Gracias por su respuesta. Seguí tus pasos y creé todos los scripts, enlaces y archivos correspondientes. Su solución funciona muy bien desde la línea de comandos y funciona como se anuncia. Pero cuando intento configurar el script (o más bien el enlace simbólico) como la aplicación predeterminada para abrir un tipo de archivo específico, falla y vuelve al valor predeterminado secundario. No sé si estoy haciendo algo mal.
Glutanimate
Así es como definí el script como la aplicación predeterminada: 1.) crear un lanzador ( co.desktop) con Exec=/home/user/.scripts/Customization/Defaultapps/custom-open-text~ / .local / share / aplicaciones. 2.) Editar ./local/share/applications/mimeapps.listy añadir la siguiente asociación predeterminada: text/plain=co.desktop. ¿Encuentra algún error en este procedimiento?
Glutanimate
1
ok prueba la nueva versión, hice algunas mejoras para que sea más fácil de usar. También he agregado el controlador gráfico de errores, por lo que ahora debería aparecer una alerta con el mensaje de error. Intente nuevamente y publique el mensaje de error en un comentario si aún no funciona. También podría mencionar qué versión de Ubuntu y qué entorno de escritorio probó.
Marwan Alsabbagh el
¡Funciona y lo hace fantásticamente (usando LXDE / Unity)! Su solución merece cada uno de los últimos puntos de esta recompensa. Muchas gracias por tomarse el tiempo para hacer esto. (PD: sigo pensando que una función como esta debería venir con Ubuntu de forma predeterminada. La eliminación de saltos puede no ser una práctica popular, pero es lo suficientemente común como para garantizar una solución oficial).
Glutanimate
1
Lo siento, pero no soy el OP, simplemente configuré la recompensa. @Olive Twist tendrá que marcar su propia pregunta como respondida.
Glutanimate
2

Si no encuentra la forma "correcta" de hacerlo, puede usar un método de fuerza bruta como:

  1. Establecer todos los valores predeterminados en un entorno de escritorio
  2. Haga algo como cd $HOME;ls -Rlrt | lesspara averiguar qué archivos se actualizaron, es decir, dónde se guardaron esas opciones
  3. Haga una copia separada de esos archivos para cada entorno de escritorio (copia de seguridad).
  4. Repita para cada entorno de escritorio
  5. Copie el conjunto apropiado en su lugar justo antes de cambiar a ese entorno de escritorio (probablemente cerrando sesión y volviendo a iniciar sesión y seleccionando el nuevo entorno de escritorio).

Con suerte, hay una manera de cambiar los entornos de escritorio de un script de shell con la opción de decirle al entorno de escritorio de dónde obtener sus archivos de configuración. Eso podría ser más limpio que mover archivos todo el tiempo, pero no he investigado si eso funciona o cómo funciona.

Otra solución mucho más simple, pero no exactamente lo que solicitó, sería simplemente:

  1. Cree cuentas de usuario separadas para cada entorno de escritorio
  2. Crea un nuevo grupo para estos usuarios
  3. Agregue todos estos usuarios al nuevo grupo
  4. Cree todos los archivos de datos comunes a los que necesita acceder desde todos estos usuarios -rwxrwxr-x ( chmod 775 list-of-files-and-directories). De esa manera no obtendrá errores de permiso al intentar escribir en un archivo que otro de sus "usuarios" escribió primero.

    • Si desea que algunos archivos sean iguales para todos estos usuarios, puede crearlos en un usuario y vincularlos al resto de ellos. Esto debería funcionar, pero requerirá que recuerdes que están configurados de esa manera cuando cambias alguno de ellos. Por ejemplo, si edita uno de ellos y su editor crea un archivo de respaldo, ese archivo de respaldo solo se guardará donde lo editó, no en todas las demás cuentas de usuario.
Joe
fuente
Puede observar dónde se almacenan las asociaciones de archivos por usuario~/.local/share/mime/
RobotHumans