tool extensions extensiones extension chrome gnome-shell-extensions

gnome shell extensions - extensions - Documentación para escribir extensiones de GNOME Shell



shell extension ubuntu (2)

Me han pedido que personalice el diseño del escritorio de GNOME 3. Aparentemente, la forma de hacerlo es escribiendo una "extensión".

Me las he arreglado para hacer algunas de las cosas que quería hacer, pero me siento absolutamente hambriento de información. No puedo encontrar ninguna documentación útil en ninguna parte . He desperdiciado días enteros de mi vida buscando frenéticamente todos los términos de búsqueda imaginables en un intento desesperado de encontrar información útil.

El sitio web de GNOME tiene cientos de extensiones para descargar. Estos no son triviales 3-liners; son piezas sofisticadas de código. Desafía la creencia de que alguien podría escribir esto sin documentación que explique cómo hacerlo.

Por favor, ¿alguien me puede decir dónde está la documentación? Hasta ahora, lo mejor que he podido hacer es desmontar las extensiones existentes intentando rastrear el comando mágico que hace el bit específico que me interesa. (¡No es una tarea fácil!)

Nombres de comandos, rutas de objetos, programas de ejemplo, ¡ cualquier cosa sería útil!


Recientemente he cavado en él. La documentación en su mayoría no está disponible o desactualizada. Aquí hay algunas fuentes que me ayudaron a comenzar (y a través del desarrollo):

Debido a que la documentación no está disponible (o actualizada), necesitará hacer muchas lecturas de fuentes. Relacioné las fuentes de gnome-shell anteriores (la parte de JavaScript), que es un buen comienzo cuando me meto en partes que no están cubiertas por la documentación oficial (que es lo más completo que encontrarás).

También es especialmente útil comprobar extensiones.gnome.org para extensiones que hacen cosas similares a las que desea crear, y ver sus fuentes (la mayoría de ellas son de código abierto en GitHub o Bitbucket. También puede instalarlas y encontrar el fuentes bajo ~/.local/share/gnome-shell/extensions/ ).

Cuando busque algo para usar o más documentación sobre una función en particular, también puede consultar los manuales de enlaces en diferentes idiomas (pensé que los parámetros y los valores de retorno podrían no coincidir).

Por último, pero no menos importante, aquí hay algunos consejos para la eliminación de fallas :

LookingGlass no es particularmente útil. Solo muestra una línea de una excepción (la descripción) y solo si se producen en el momento del inicio (cuando se inicia por primera vez la extensión).

Para StackTraces completos y excepciones de tiempo de ejecución, consulte el ~/.xsession-errors -file. Puede ser muy largo e hinchado. Utilizo este práctico script para leerlo:

# Grabs the last session-errors from the current X11 session. # This includes full Stack-Trace of gnome-shell-extension errors. # See https://live.gnome.org/GnomeShell/Extensions/StepByStepTutorial#lookingGlass tail -n100 ~/.cache/gdm/session.log | less

Tenga en cuenta que desde Gnome 3.6, si está utilizando gdm como administrador de visualización, el registro de sesión actual es el archivo ~/.cache/gdm/session.log .

En algunas distribuciones más nuevas que usan systemd, puede obtener los registros de errores con:

journalctl -f /usr/bin/gnome-session

Para depurar la parte prefs de su extensión, puede iniciar las preferencias usando gnome-shell-extension-prefs desde un terminal, para ver cualquier salida de excepción en la consola (también puede llamar a la herramienta como gnome-shell-extension-prefs [uuid] , para mostrar directamente sus preferencias de extensiones).

Dado que actualmente no existe una manera real de depurar con puntos de interrupción (lo hay, pero es complicado ), puede iniciar sesión en la consola para una comprobación rápida, use la función de print() . Verá la salida como se mencionó anteriormente (ya sea en el archivo de error de sesiones o en el terminal al iniciar gnome-shell-extension-prefs ).

Aunque puede ser un poco difícil entrar en él, el marco de extensión es bastante poderoso. ¡Diviértete!

Escribí una publicación de blog con un poco más de detalle , que se puede encontrar aquí: Hacer extensiones de Gnome-Shell


Se puede encontrar una extensa lista de referencias en la página de Gnome Developer - API Reference .

Utilicé lo siguiente para mi extensión, pero su uso puede variar:

  • GTK + 3
    GTK + es la biblioteca principal utilizada para construir interfaces de usuario en aplicaciones de GNOME. Proporciona controles de interfaz de usuario y devoluciones de llamadas de señal para controlar las interfaces de usuario.

  • GDK 3
    GDK es una capa intermedia que aísla GTK + de los detalles del sistema de ventanas.

  • Clutter
    Clutter es una biblioteca basada en GObject para crear interfaces de usuario gráficas rápidas y visualmente ricas.

  • GObject Introspection
    GObject Introspection se esfuerza por proporcionar una capa de middleware entre bibliotecas C (basadas en GObject) y enlaces de lenguaje.

  • Shell
    Manual de referencia de Shell

  • St
    St - Shell Toolkit - es el kit de herramientas basado en Clutter personalizado de GNOME Shell que define a los actores útiles. Algunos de estos actores, como StBoxLayout y StBin implementan varias opciones de diseño.

  • Especificación del tema del icono
    Esta especificación de freedesktop.org describe una forma común de almacenar temas de iconos.

NOTA: ¡ Estos dos últimos son muy útiles para encontrar parámetros de elementos visuales!

  • PyGTK
    PyGTK es GTK + para Python. Esta referencia contiene un capítulo para cada módulo Python PyGTK (que corresponde a la biblioteca subyacente GTK +) que contiene las descripciones de clase.

  • PyGObject
    PyGObject es un módulo de extensión de Python que brinda acceso limpio y consistente a toda la plataforma de software de GNOME mediante el uso de GObject Introspection. Hablando específicamente, se trata de enlaces de Python para GLib, GObject, GIO y GTK +.
    Esta referencia contiene un capítulo para cada módulo PyGObject que contiene las descripciones de clase.