Ist es möglich, ein Fenster mit einer Tastenkombination in Gnome3 zu öffnen?


8

Ich bin kürzlich von KDE4 zu Gnome3 gewechselt. In KDE können Sie anwendungsspezifische Tastaturkürzel erstellen, um Fenster zu öffnen. Normalerweise erstelle ich jeweils eine für Firefox, Thunderbird, mein Terminal usw. Auf diese Weise ist das Umschalten zwischen Fenstern blitzschnell. Gnome scheint diese Art von Funktionalität nicht zu haben. Außerdem mag ich das Fensterschaltschema von Gnome3 (Alt-Tab) nicht.

Daher habe ich mich gefragt, ob es möglich ist, Fenster über DBUS zu öffnen. Wenn dies der Fall ist, können Sie ein Skript schreiben und diesem eine Tastenkombination zuweisen.


1
Wenn Sie das Fenster anheben und fokussieren möchten, wmctrlkönnen Sie dies tun.
Gilles 'SO - hör auf böse zu sein'

1
Wie "intelligent" ist die KDE-Verknüpfungsmethode? z.B. Wie geht es mit mehreren Fenstern derselben Anwendung um? Es gibt mehrere X-Tools, mit denen Sie einzeln oder zusammen arbeiten können, was Sie möchten. Welche Sie jedoch verwenden können, hängt davon ab, wie ausgefeilt Sie es erstellen möchten.
Peter.O

@ Gilles, danke für den Hinweis, wmctrl hat den Trick gemacht @fred die KDE-Verknüpfungsmethode funktioniert nur für einzelne Fenster, aber das ist gut genug für mich, denn ich benutze nur einzelne Fenster für Firefox, Thunderbird usw.
Freidenker

Antworten:


3

Ich habe im Fluxbox-Wiki ein Skript gefunden, mit wmctrldem eine Anwendung gefunden und das Fenster geöffnet werden kann, wenn sie bereits ausgeführt wird. Andernfalls startet das Skript die Anwendung. Ich verwende dieses Skript mit Optimierungen, um Argumente zu unterstützen, die ich in meinem Blog dokumentiert habe .

  1. Stellen Sie sicher, dass wmctrlinstalliert ist.

    sudo apt-get install wmctrl
    
  2. Fügen Sie Ihrem Pfad (möglicherweise in $HOME/bin/find_app.sh) das folgende Skript hinzu und machen Sie es ausführbar.

    #!/bin/bash
    # Find_app
    
    # Author: Lucas van Staden (lvs at dedmeet.com / http://www.dedmeet.com)
    # This little script will try and find the application attempting to start
    # in the running processes, and if found, focus the application
    # if not found, a new instance will start
    
    # usage:
    # find_app.sh <application with full path>
    
    # params
    # 1 - application to start (full path)
    
    # helper applications
    DOLLARONE=$(echo $1 | sed -e 's/[\t ]*$//') #Delete trailing spaces
    WMCTRL=`which wmctrl`;
    GREP=`which grep`;
    APPLICATION=$(echo $DOLLARONE | cut -d ' ' -f 1)
    if [ "x$APPLICATION" != "x$DOLLARONE" ]; then
      APPARGS=$(echo $DOLLARONE | cut -d ' ' -f 2)
    fi
    BASENAME=`basename $APPLICATION`;
    BASENAME=`echo $BASENAME | tr "[:upper:]" "[:lower:]"`
    FOUND=0;
    function findwindow {
    # 1 = BASENAME
    # 2 = WMCTRL
    # 3 = GREP
            IFS=$'\n';
            for RUNNING in `$2 -l -x`
            do
                    if [ `echo $RUNNING | tr "[:upper:]" "[:lower:]" | $3 -c $DOLLARONE` -gt 0 ]
                    then
                            HOSTNAME=`hostname`
                            WINDOW=${RUNNING#*${HOSTNAME} }
                            $2 -a $WINDOW
                            FOUND=1;
                    fi;
            done
    }
    if [ "x$APPARGS" = "x" ]; then
      findwindow $BASENAME $WMCTRL $GREP;
      if [ $FOUND -eq 0 ]
      then
              $APPLICATION &
              sleep 2;
              # Try and find the application, after opened
              findwindow $BASENAME $WMCTRL $GREP;
              if [ $FOUND -eq 0 ]
              then
                      # Still not found, wait a bit more, and try again
                      sleep 3;
                      findwindow $BASENAME $WMCTRL $GREP;
              fi
      fi
    else
      $APPLICATION $APPARGS &
    fi
    
  3. Aktualisieren Sie die Desktop-Eintragsdateien der Anwendungen, für die Sie eine einzelne Verknüpfung zum Starten und Erhöhen haben möchten, damit die Anwendungen über das obige Skript aufgerufen werden.

    Zum Beispiel:

    cp /usr/share/applications/firefox.desktop ~/.local/share/applications/
    

    Bearbeiten firefox.desktopin ~/.local/share/applications/und ändern Sie die ExecZeile beziehen sich auf find_app.sh:

    Exec=find_app.sh "firefox %u"
    
  4. Fügen Sie nun eine Tastenkombination für Ihren Standardbrowser hinzu:

    Systemeinstellungen | Tastatur | Verknüpfungen | Trägerraketen | Starten Sie den Webbrowser

  5. Gnome-Shell neu Alt rstarten : Drücken Sie diese Taste , um den Ausführungsdialog aufzurufen. Geben Sie ein rund drücken Sie Enter.

Sie sollten nun in der Lage sein, Ihren Browser mit einer einzigen Tastenkombination zu starten / zu erhöhen.


@ Gilles Es ist ein Open-Source-Skript, es liegt nicht an mir, es zu veröffentlichen oder nicht. Ich dachte, es ist einfach zu lang, um hier veröffentlicht zu werden. Wird meine Antworten mit mehr Details aktualisieren
Freidenker

Ich denke, es sollte eine native gnome3-Methode geben, um dies mithilfe der libbamf-Bibliothek zu implementieren.
Freidenker

2

Es gibt ein ähnliches Tool namens xdotool . Es scheint sehr ähnlich zu sein wie wmctrl. Der Hauptvorteil gegenüber letzterem besteht möglicherweise darin, dass für die Handhabung von Fenstern X-Fenster-IDs anstelle von Zeichenfolgen verwendet werden. Ich weiß allerdings nicht, ob es in Ihrem Fall wichtig ist. Angenommen, Sie verwenden Chrome, das auf einer Website geöffnet ist, deren Titel Mozilla enthält, und können die Anwendung möglicherweise nicht anhand des Fenstertitels identifizieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.