%20%E4%B8%AD%E7%9A%84%E3%80%8C%E7%84%A6%E9%BB%9E%E6%87%89%E7%94%A8%E7%A8%8B%E5%BC%8F%E3%80%8D%E9%8D%B5%E7%9B%A4%E5%BF%AB%E9%80%9F%E9%8D%B5.png)
在 Unity 中,按Super+1可9啟動應用程式或將焦點切換到應用程式。我可以在 Lubuntu 中(即在 LXDE 中)指派具有類似屬性的鍵盤快速鍵嗎?
更準確地說,我是否可以設定一個快捷方式,以便如果應用程式已經打開,那麼焦點將切換到它並且工作區將相應地更改(就像在 Unity 中一樣)?到目前為止,我只設法分配一個啟動應用程式(的新實例)的捷徑。
答案1
Openbox(LXDE 的視窗管理器)沒有內建的功能,但需要一些幫助xdo工具我們可以編寫一個可以複製甚至增強 Unity 行為的腳本。
首先,請確保您安裝了 xdotool:
sudo apt-get install xdotool
將以下腳本另存為focus_or_launch
並使其可執行:
#!/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
該腳本的工作原理如下:當您執行focus_or_launch application
xdotool 時,它將尋找應用程式的現有實例並聚焦其中之一。如果沒有找到實例,腳本將啟動一個新實例。
要將此腳本與您的桌面會話集成,請編輯您的 openbox 設定檔(例如~/.config/openbox/lxde-rc.xml
、../lubuntu-rc.xml
或../rc.xml
),並為您要控制的每個應用程式添加類似於以下內容的部分:
<keybind key="W-g">
<action name="Execute">
<command>focus_or_launch gedit</command>
</action>
</keybind>
確保替換focus_or_launch
為系統上腳本的路徑,或將腳本複製到您的$PATH
.
如果您不希望腳本啟動新的應用程式實例,只需刪除以下部分:
"$Executable" > /dev/null 2>&1 &
disown
PS:此腳本應該適用於所有 xdotool 相容的桌面環境(例如 Unity、GNOME、XFCE...)