Lubuntu(LXDE)中的“焦点应用程序”键盘快捷键

在Unity中,按Super + 19启动或切换焦点到应用程序。 我可以在Lubuntu中指定具有类似属性的键盘快捷键(即在LXDE中)吗?

更确切地说,我可以设置一个快捷方式,如果应用程序已经打开,那么焦点将切换到它,工作区将相应地更改(如在Unity中)? 到目前为止,我只设法分配一个启动(应用程序的新实例)的快捷方式。

Openbox(LXDE的窗口管理器)没有内置function,但是在xdotool的帮助下,我们可以编写一个可以复制甚至增强Unity行为的脚本。

首先,确保安装了xdotool:

sudo apt-get install xdotool 

将以下脚本保存为focus_or_launch并使其可执行:

  #!/bin/bash # NAME: focus_or_launch # VERSION: 0.4 # AUTHOR: (c) 2014 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  # EXAMPLE: focus_or_launch google-chrome ############# GLOBVAR/PREP ############### Executable="$1" ExecutableBase="$(basename "$Executable")" Usage="\ Usage: $(basename $0) command Eg: $(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 

以下是脚本的工作原理:当您运行focus_or_launch application xdotool将查找focus_or_launch application的现有实例并关注其中一个。 如果没有找到实例,脚本将启动一个新实例。

要将此脚本与桌面会话集成,请编辑openbox配置文件(例如~/.config/openbox/lxde-rc.xml../lubuntu-rc.xml ~/.config/openbox/lxde-rc.xml ../lubuntu-rc.xml../rc.xml )并添加类似于您要控制的每个应用程序的以下内容:

   focus_or_launch gedit   

确保将focus_or_launch替换为系统上脚本的路径,或者将脚本复制到$PATH

如果您不希望脚本启动新的应用程序实例,只需删除以下部分:

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

PS:此脚本应适用于所有xdotool兼容的桌面环境(例如Unity,GNOME,XFCE ……)