重复问题至如何在特定程序运行时禁用按键?,但从未得到答复。(哪个选项更糟糕,我重新发布相同的问题,还是我重新发布旧帖子?)
无论如何,有没有办法在特定程序运行时禁用特定键?或者,在特定程序运行时禁用 Dash?
答案1
简单的解决方案
创建两个快捷方式,一个用于禁用该Super键,一个用于随意恢复。
进入系统设置 -> 键盘 -> 快捷键 -> 自定义,点击+按钮。将新快捷键命名为“Disable Dash”。命令如下
gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ show-launcher 'Disabled'
要创建重新启用脚本的快捷方式,请重复上述步骤,但命令应该是
gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ show-launcher '<Super>'
脚本解决方案
当用户指定的程序获得焦点时,下面的脚本将禁用该Super键。请注意,用户仍然可以用鼠标单击 Dash 图标来调用 Dash。程序名称必须用单引号引起来,并且与 Unity Launcher 中显示的名称完全相同。可以以相同的格式指定多个窗口,并用空格分隔
例如,要在 Firefox 窗口每次获得焦点时禁用 Super 键,必须调用以下脚本
disable_super_key.sh 'Firefox Web Browser'
要禁用两者firefox
并gnome-terminal
执行
disable_super_key.sh 'Firefox Web Browser' 'Terminal'
如何获取脚本
用户可以在此处复制源代码,也可以按照以下说明从 github 获取:
sudo apt-get install git
cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git
sudo chmod -R +x sergrep
该脚本将位于/opt/sergrep/disable_super_key.sh
要使脚本在每次登录时自动启动,请参阅如何在登录时自动启动应用程序?. 提供/opt/sergrep/disable_super_key.sh
(完整路径)作为命令
脚本源
#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: [email protected]
# Date: April 12 , 2016
# Purpose: Disable super key that brings up Unity Dash
# per specific application
#
# Written for: https://askubuntu.com/q/754884/295286
# Tested on: Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo , 2016
#
# Permission to use, copy, modify, and distribute this software is hereby granted
# without fee, provided that the copyright notice above and this permission statement
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
ARGV0="$0"
ARGC=$#
enable_dash_key()
{
gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ show-launcher '<Super>'
}
disable_dash_key()
{
gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ show-launcher 'Disabled'
}
get_active_app()
{
qdbus org.ayatana.bamf \
/org/ayatana/bamf/matcher \
org.ayatana.bamf.matcher.ActiveApplication
}
get_active_app_name()
{
qdbus org.ayatana.bamf \
$(get_active_app) \
org.ayatana.bamf.view.Name
}
check_active_app()
{
active_name=$(get_active_app_name)
local is_found
for win in "${windows_list[@]}"
do
if [ "$active_name" = "$win" ] ; then
is_found=true
break
else
is_found=false
fi
done
if $is_found ; then
disable_dash_key
else
enable_dash_key
fi
}
print_usage()
{
cat << EOF
Copyright Serg Kolo , 2016
Usage: disable_super_key.sh 'App Name 1' [ 'App Name 2' 'App Name 3' ... ]
The script disables the Super key for the specified set of applications
under Ubuntu's Unity environment. The list of windows must be space
separated, each app name single quoted and exactly as it appears on the
launcher (or as it appears in the .desktop file of that app), so spelling
and spacing matter.
Note that the script only disables the Super key as shortcut for Dash.
The user still will be able to invoke Dash by manually clicking on the
Ubuntu icon in the launcher
EOF
}
main()
{
if [ $ARGC -eq 0 ]; then
print_usage
exit
fi
local windows_list
windows_list=( "$@" )
dbus-monitor --profile "type='signal',member='FocusedWindowChanged'" |\
while read line
do
case "$line" in
*FocusedWindowChanged*) check_active_app ;;
esac
done
}
main "$@"