.png)
In Unity startet oder wechselt das Drücken von + Superden Fokus zu einer Anwendung. Kann ich in Lubuntu (also in LXDE) eine Tastenkombination mit einer ähnlichen Eigenschaft zuweisen?19
Genauer gesagt: Kann ich eine Verknüpfung so einrichten, dass, wenn die Anwendung bereits geöffnet ist, der Fokus auf diese wechselt und der Arbeitsbereich sich entsprechend ändert (wie in Unity)? Bisher ist es mir nur gelungen, eine Verknüpfung zuzuweisen, die (eine neue Instanz) der Anwendung startet.
Antwort1
Openbox (der Fenstermanager von LXDE) hat keine eingebaute Funktion dafür, aber mit ein wenig Hilfe vonAbonnierenwir können 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 unter 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 es ausführen, focus_or_launch application
sucht xdotool nach vorhandenen Instanzen der Anwendung und konzentriert sich auf eine davon. Wenn keine Instanz gefunden wird, startet das Skript eine neue.
Um dieses Skript in Ihre Desktop-Sitzung 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 Abschnitt ähnlich dem folgenden hinzu:
<keybind key="W-g">
<action name="Execute">
<command>focus_or_launch gedit</command>
</action>
</keybind>
focus_or_launch
Stellen Sie sicher, dass Sie durch den Pfad zum Skript auf Ihrem System ersetzen , 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
PS: Dieses Skript sollte auf allen xdotool-kompatiblen Desktopumgebungen funktionieren (z. B. Unity, GNOME, XFCE ...)