it-swarm.com.de

Tastenkürzel "Fokusanwendung" in Lubuntu (LXDE)

Drücken Sie in Unity Super + 1 zu 9 Startet oder wechselt den Fokus auf eine Anwendung. Kann ich in Lubuntu (d. H. In LXDE) eine Tastenkombination mit einer ähnlichen Eigenschaft zuweisen?

Kann ich eine Verknüpfung so einrichten, dass, wenn die Anwendung bereits geöffnet ist, der Fokus darauf wechselt und sich der Arbeitsbereich entsprechend ändert (wie in Unity)? Bisher konnte ich nur eine Verknüpfung zuweisen, die die Anwendung startet (eine neue Instanz von).

7
DustByte

Openbox (der Fenstermanager von LXDE) hat hierfür keine eingebaute Funktionalität, aber mit ein wenig Hilfe von xdotool können wir ein Skript schreiben, das das Verhalten von Unity replizieren und sogar verbessern kann.

Stellen Sie zunächst sicher, dass Sie xdotool installiert haben:

Sudo apt-get install xdotool

Speichern Sie das folgende Skript als focus_or_launch und machen Sie es ausführbar:

 #!/bin/bash

# NAME:         focus_or_launch
# VERSION:      0.4
# AUTHOR:       (c) 2014 Glutanimate <https://github.com/Glutanimate/>
#
# DESCRIPTION:  Focus existing app window or launch application if no
#               window found
#
#               Simplified version of a script by Henning Bekel
#               (https://bbs.archlinux.org/viewtopic.php?pid=625009#p625009)
#
# DEPENDENCIES: xdotool
#
# LICENSE:      GNU GPLv3 (http://www.gnu.de/documents/gpl-3.0.en.html)
#
# NOTICE:       THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 
#               EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 
#               PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR 
#               IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
#               AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND 
#               PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
#               YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
#
#               IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY 
#               COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS 
#               PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, 
#               INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 
#               THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED 
#               INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE 
#               PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER 
#               PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#
# USAGE:        focus_or_launch <command>
# EXAMPLE:      focus_or_launch google-chrome


############# GLOBVAR/PREP ###############

Executable="$1"
ExecutableBase="$(basename "$Executable")"
Usage="\
Usage: $(basename $0) command
E.g.:  $(basename $0) google-chrome\
"

############## USGCHECKS #################

if [[ $# -ne 1 || "$1" =~ ^(-h|--help)$ ]]; then
  echo "$Usage"
  exit 1
fi

################ MAIN ####################

MostRecentWID="$(xdotool search --class --name "$ExecutableBase" | tail -1 2> /dev/null)"

if [[ -z "$MostRecentWID" ]]; then
  echo "$ExecutableBase not found. Launching new window."
  "$Executable" > /dev/null 2>&1 &
  disown
else
  echo "Focusing existing instance of $ExecutableBase."
  # use brute-force approach if activating most recent WID doesn't work
  xdotool windowactivate "$MostRecentWID" 2>&1 | grep failed \
  && xdotool search --class --name "$ExecutableBase" windowactivate %@
fi

So funktioniert das Skript: Wenn Sie focus_or_launch application xdotool ausführen, wird nach vorhandenen Instanzen der Anwendung gesucht und eine davon fokussiert. Wird keine Instanz gefunden, startet das Skript eine neue.

Um dieses Skript in Ihre Desktopsitzung zu integrieren, bearbeiten Sie Ihre Openbox-Konfigurationsdatei (z. B. ~/.config/openbox/lxde-rc.xml, ../lubuntu-rc.xml oder ../rc.xml) und fügen Sie für jede Anwendung, die Sie steuern möchten, einen ähnlichen Abschnitt hinzu:

<keybind key="W-g">
  <action name="Execute">
    <command>focus_or_launch gedit</command>
  </action>
</keybind>

Stellen Sie sicher, dass focus_or_launch durch den Pfad zum Skript auf Ihrem System ersetzt wird, oder kopieren Sie das Skript alternativ in Ihr $PATH.

Wenn Sie nicht möchten, dass das Skript eine neue App-Instanz startet, entfernen Sie einfach den folgenden Abschnitt:

"$Executable" > /dev/null 2>&1 &
disown

P.S .: Dieses Skript sollte in allen xdotool-kompatiblen Desktop-Umgebungen (z. B. Unity, GNOME, XFCE ...) funktionieren.

8
Glutanimate