如何让键盘像 OSX System Wide 一样工作?

bra*_*rks 141 shortcut-keys

我不断地在两台电脑之间来回切换:

  • OSX 雪豹
  • Ubuntu 10.10

我希望能够让 Ubuntu 使用与 OSX System Wide相同的键盘快捷键,仅适用于以下键盘序列(即我不想让 Ctrl 像 Super 一样)

  • Super+C -> 复制

  • Super+V -> 粘贴

  • Super+T -> 在我所在的任何浏览器中打开一个新标签。

  • Super+W -> 在我所在的任何浏览器中关闭一个选项卡。

因此,在短期,反正是有对我来说,地图只是广这些键盘序列以下,系统?

  • Super+C -> Ctrl+C
  • Super+V -> Ctrl+V
  • Super+T -> Ctrl+T
  • Super+W -> Ctrl+W

我知道有办法让我为VIM做到这一点,和Firefox,我敢肯定,特别是对于大多数应用程序...但我宁愿这样做了一次,并且有它工作的方式全系统

我使用的是标准 PC 键盘,即 Ubuntu 上的“通用 105 键(国际)PC”。我也在 Mac mini 上使用相同的键盘。

csc*_*ney 45

如果你安装了 xautomation 包,你可以在 System/Preferences/Keyboard Shortcuts/Custom 中添加一个命令,如:

xte "keyup Meta_L" "keyup c" "keydown Control_L" "key c" "keyup Control_L"
Run Code Online (Sandbox Code Playgroud)

并将其映射到 Meta-C。


替代解决方案:

安装 AutoKey (apt-get install autokey-gtk) 并将短语设置为:

Phrase Text: <ctrl>+C (actually type out the <ctrl>+ here)
Paste Using: Keyboard
Abbreviation: None
Hotkey: <super>+v
Window Filter: None
Run Code Online (Sandbox Code Playgroud)

  • 快速检查它对我有用,但我找到了一个可能比 xte 更可靠的解决方案(即使你让它工作)。检查修改后的答案。 (2认同)

小智 36

从 Ubuntu 14 开始,您可以使用GNOME Tweaks

sudo apt install gnome-tweaks # formerly gnome-tweak-tool
Run Code Online (Sandbox Code Playgroud)

然后,查找调整工具 > 键盘和鼠标 > 附加布局选项 > Alt/Win 键行为。

并检查: Ctrl 映射到 Win 键和通常的 Ctrl 键。

截屏

  • 似乎没有做任何事情或者不是 Mac 行为 (2认同)

dan*_*max 14

有一种映射CtrlWin/Super键的方法:

  1. 转到system->preferences->keyboard

  2. 打开选项卡布局

  3. 单击选项...

  4. 打开Alt/Win键行为

  5. 并选择Control 映射到 Win 键

对于控制台,这里有一个论坛帖子如何做到这一点

如需更多挖掘,请在此处查看通用 Linux 键盘 HOWTO 。

问候

  • 嘿@danizmax - 感谢您的回复...但我特别想避免改变 Ctrl 的完整行为...我在帖子中提到的键盘快捷键……谢谢! (3认同)
  • 现在在 gnome 调整中,“键盘和鼠标” (2认同)

Pav*_*dda 11

上述一些解决方案是旧的,不适用于 Ubuntu 18.04。这是更新的答案

  1. 如果系统中没有安装gnome-tweaks

    sudo apt-get install gnome-tweaks

  2. 按左下角的显示应用程序打开应用程序列表。

  3. 请注意,这只会将 WINDOWS 键的行为更改为 CMD 键并保持 CTRL 键与以前相同(您将有 2 个 CTRL 键)。如果您不喜欢这样,请跳过第 4 步并转到第 5 步

  4. 寻找Tweaks application --> Keyboard and Mouse --> Additional Layout options --> Alt/Win behavior --> Select Control is mapped to Win keys and the usual Ctrl Keys.

  5. 如果您完成了第 4 步,请跳过此步骤。此步骤会将 Windows 键行为交换为 Ctrl,反之亦然。寻找Tweaks application --> Keyboard and Mouse --> Additional Layout options --> Ctrl Position --> Select Swap Left Win with Left Ctrl

  6. 我从 macOS 中想念的另一件事是能够使用 CMD+Tab(在这种情况下是 Windows+Tab)切换窗口。要实现这一点,请转到Settings --> Keyboard --> Look for Switch Windows under navigation section --> Double Click it and press Windows+Tab when pop up appears


met*_*mit 8

要在扩大cscarney的自动密钥提示,我发展我的自动密钥的配置来实现这一切在Ubuntu(OS X样<cmd>+c<cmd>+v... Emacs风格<ctrl>+f<ctrl>+b...)在我的dotfile回购

我不使用基本短语(当前窗口过滤被破坏的地方),而是使用 Python 脚本,以便能够在诸如 Emacs、Eclipse、Vim、gnome-terminal 之类的应用程序中禁用 AutoKey ......我不想搞砸的地方上现有的快捷方式。

您可以查看README底部的有关如何设置的说明。


joe*_*dle 8

编辑:我在这里描述的简单方法有一些缺点(下面提到,最明显的是粘滞键)。所以我现在建议检查Kinto,它通过主动重新映射键盘来避免此类问题。


我想要一个可以在任何桌面环境/窗口管理器中工作的解决方案,所以我结合了 cscarney 的建议,将 xautomation 与SXHKD(简单的 X 热键守护程序)结合使用。

这是~/.config/sxhkd/sxhkdrc我制作的基本配置文件。

高级:我的最新版本比较完整,可以针对不同的应用程序发送不同的击键,但是需要外部脚本,并且可能有一些你不想要的绑定。

这是一个片段:

# Reload this config
control + alt + shift + r
  killall -USR1 -u "$USER" sxhkd && echo 'sxhkd config reloaded'

# Cut, copy and paste
alt + x
  xte "keyup x" "keyup Meta_L" "keydown Control_L" "key x" "keyup Control_L" "keydown Meta_L"
alt + c
  xte "keyup c" "keyup Meta_L" "keydown Control_L" "key c" "keyup Control_L" "keydown Meta_L"    
alt + v
  xte "keyup v" "keyup Meta_L" "keydown Control_L" "key v" "keyup Control_L" "keydown Meta_L"

# Open tab, close tab, restore closed tab
alt + t
  xte "keyup t" "keyup Meta_L" "keydown Control_L" "key t" "keyup Control_L" "keydown Meta_L"
alt + w
  xte "keyup w" "keyup Meta_L" "keydown Control_L" "key w" "keyup Control_L" "keydown Meta_L"    
alt + shift + t
  xte "keyup t" "keyup Meta_L" "keydown Control_L" "key t" "keyup Control_L" "keydown Meta_L"

# Move to home/end
alt + Left
  xte "keyup Meta_L" "keyup Left" "key Home" "keydown Meta_L"
alt + Right
  xte "keyup Meta_L" "keyup Right" "key End" "keydown Meta_L"
alt + shift + Left
  xte "keyup Meta_L" "keyup Left" "key Home" "keydown Meta_L"
alt + shift + Right
  xte "keyup Meta_L" "keyup Right" "key End" "keydown Meta_L"

# Move one word
super + Left
  xte "keyup Super_L" "keyup Left" "keydown Control_L" "key Left" "keyup Control_L" "keydown Super_L"
super + Right
  xte "keyup Super_L" "keyup Right" "keydown Control_L" "key Right" "keyup Control_L" "keydown Super_L"
super + shift + Left
  xte "keyup Super_L" "keyup Left" "keydown Control_L" "key Left" "keyup Control_L" "keydown Super_L"
super + shift + Right
  xte "keyup Super_L" "keyup Right" "keydown Control_L" "key Right" "keyup Control_L" "keydown Super_L"
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 如您所见,如果我在执行虚拟笔画之前键入原始修改键,然后我会再次键入它。这意味着用户可以重复他们的按键,而无需再次释放和按下修改键。换句话说,按下 Alt-W 后,系统会看到 Alt 键被按下。

注意事项:

  • 如果在 xte 命令仍在运行时释放 Alt 键,这可能是一个问题(尤其是在速度较慢的机器上)。你最终会得到一个“粘性”的 Alt 键,因为 xte 已经为你按下了它!

  • 使用这种方法,如果按住键,触发器将不会重复。(所以你不能通过按住 Super-Left 移动 12 个单词。)


小智 8

撞这个!你的小指会感谢我

所有的肌肉记忆都是基于 Mac 的,我在工作和个人生活中使用 Mac,但我偶然发现了戴尔 Latitude E7470,我想我不妨试试Linux(因为我的 Macbook Pro 是 2012 年的)并且非常沉重,我只是不想打扰\r\n行尾)。因此,找出如何修改系统以匹配我的肌肉记忆而不是重新学习键盘快捷键是一项进展缓慢的工作。

起初,我只是使用键盘 > 布局 > 选项...设置“Ctrl 映射到 Alt;Alt 映射到 Win”但是,这是一件非常小的事情,我不喜欢我的设置“T适用,直至我过去招待员。我也无法让 ~/.Xmodmap 在启动时运行(单独运行,作为 .xinitrc 的一部分,以及作为启动应用程序和 /etc/default/ 中的自定义启动命令)

我目前正在运行Ubuntu MATE 19.10 (Eoan),并且键盘被识别为pc105

您必须修改下面的脚本(或单个文件,如果您已经对它们进行了其他修改并希望保留)以匹配您计算机上的任何键盘。

制作 ~/.Xmodmap:

echo '! -*- coding: utf-8 -*-
! keycode  37 = Control_L NoSymbol Control_L
! keycode  64 = Alt_L Meta_L Alt_L Meta_L
! keycode 105 = Control_R NoSymbol Control_R
! keycode 108 = Alt_R Meta_R Alt_R Meta_R
! keycode 133 = Super_L NoSymbol Super_L
! keycode 134 = Super_R NoSymbol Super_R
! keycode 135 = Menu NoSymbol Menu
! keycode 147 = XF86MenuKB NoSymbol XF86MenuKB
! keycode 204 = NoSymbol Alt_L NoSymbol Alt_L
! keycode 206 = NoSymbol Super_L NoSymbol Super_L
!
! keycode 105 = Alt_R Meta_R
clear control
clear mod1
clear mod4
keycode 37 = Super_L
keycode 105 = Super_R
keycode 133 = Alt_L Meta_L
keycode 64 = Control_L
keycode 108 = Control_R
add control = Control_L Control_R
add mod1 = Alt_L Meta_L
add mod4 = Super_L Super_R' > ~/.Xmodmap
Run Code Online (Sandbox Code Playgroud)

制作 ~/.xinitrc:

echo 'if [ -s ~/.Xmodmap ]; then
    xmodmap ~/.Xmodmap
fi
xmodmap ~/.Xmodmap' > ~/.xinitrc
Run Code Online (Sandbox Code Playgroud)

为您的键盘修改 X11 键盘符号文件(这里的重要部分是include "altwin(ctrl_alt_win)"之前// End of modifier mappings.这是一个未经修改的 /usr/share/X11/xkb/symbols/pc 文件):

echo 'default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

    key <ESC>  {    [ Escape        ]   };

    // The extra key on many European keyboards:
    key <LSGT> {    [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {    [ backslash,    bar ]   };
    key <SPCE> {    [    space      ]   };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {    [ BackSpace, BackSpace  ]   };

    key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
    key <RTRN> {    [ Return        ]   };

    key <CAPS> {    [ Caps_Lock     ]   };
    key <NMLK> {    [ Num_Lock      ]   };

    key <LFSH> {    [ Shift_L       ]   };
    key <LCTL> {    [ Control_L     ]   };
    key <LWIN> {    [ Super_L       ]   };

    key <RTSH> {    [ Shift_R       ]   };
    key <RCTL> {    [ Control_R     ]   };
    key <RWIN> {    [ Super_R       ]   };
    key <MENU> {    [ Menu          ]   };

    // Beginning of modifier mappings.
    modifier_map Shift  { Shift_L, Shift_R };
    modifier_map Lock   { Caps_Lock };
    modifier_map Control{ Control_L, Control_R };
    modifier_map Mod2   { Num_Lock };
    modifier_map Mod4   { Super_L, Super_R };

    // Fake keys for virtual<->real modifiers mapping:
    key <LVL3> {    [ ISO_Level3_Shift  ]   };
    key <MDSW> {    [ Mode_switch       ]   };
    modifier_map Mod5   { <LVL3>, <MDSW> };

    key <ALT>  {    [ NoSymbol, Alt_L   ]   };
    include "altwin(meta_alt)"

    key <META> {    [ NoSymbol, Meta_L  ]   };
    modifier_map Mod1   { <META> };

    key <SUPR> {    [ NoSymbol, Super_L ]   };
    modifier_map Mod4   { <SUPR> };

    key <HYPR> {    [ NoSymbol, Hyper_L ]   };
    modifier_map Mod4   { <HYPR> };
    include "altwin(ctrl_alt_win)"
    // End of modifier mappings.

    key <OUTP> { [ XF86Display ] };
    key <KITG> { [ XF86KbdLightOnOff ] };
    key <KIDN> { [ XF86KbdBrightnessDown ] };
    key <KIUP> { [ XF86KbdBrightnessUp ] };
};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
    key <PRSC> {
    type= "PC_ALT_LEVEL2",
    symbols[Group1]= [ Print, Sys_Req ]
    };
    key <SCLK> {    [  Scroll_Lock      ]   };
    key <PAUS> {
    type= "PC_CONTROL_LEVEL2",
    symbols[Group1]= [ Pause, Break ]
    };
    key  <INS> {    [  Insert       ]   };
    key <HOME> {    [  Home         ]   };
    key <PGUP> {    [  Prior        ]   };
    key <DELE> {    [  Delete       ]   };
    key  <END> {    [  End          ]   };
    key <PGDN> {    [  Next         ]   };

    key   <UP> {    [  Up           ]   };
    key <LEFT> {    [  Left         ]   };
    key <DOWN> {    [  Down         ]   };
    key <RGHT> {    [  Right        ]   };
};' >/usr/share/x11/xkb/symbols/pc
Run Code Online (Sandbox Code Playgroud)

以防万一,如果您需要手动添加,这里是 /usr/share/X11/xkb/symbols/altwin 的相关部分:

// Ctrl is mapped to the Alt, Alt to the Super, and Win to the Ctrl keys.
partial modifier_keys
xkb_symbols "ctrl_alt_win" {
    key <LALT> { [ Control_L, Control_L  ] };
    key <RALT> { type[Group1] = "TWO_LEVEL",
                 symbols[Group1] = [ Control_R, Control_R ] };
    key <LWIN> { [ Alt_L, Meta_L ] };
    key <RWIN> { [ Alt_R, Meta_R ] };
    key <LCTL> { [ Super_L ] };
    key <RCTL> { [ Super_R ] };
    modifier_map Control { <RALT>, <LALT> };
    modifier_map Mod1 { <LWIN>, <RWIN> };
    modifier_map Mod4 { <LCTL>, <RCTL> };
};
Run Code Online (Sandbox Code Playgroud)

修改/etc/defaults/keyboard:

echo '# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS="caps:shift_nocancel,ctrl:alt,alt:win,win:ctrl"

BACKSPACE="guess"' >/etc/default/keyboard
Run Code Online (Sandbox Code Playgroud)

最后,这是我的 GNOME 和 Marco 键绑定 dconf 转储:

侏儒:

[org/gnome/desktop/wm/keybindings]
activate-window-menu=['disabled']
begin-move=['disabled']
close=['<Control>q']
maximize=['<Alt><Super>m']
minimize=['<Control>m']
move-to-corner-ne=['disabled']
move-to-corner-nw=['disabled']
move-to-corner-se=['disabled']
move-to-corner-sw=['disabled']
move-to-side-e=['disabled']
move-to-side-n=['disabled']
move-to-side-s=['disabled']
move-to-side-w=['disabled']
move-to-workspace-1=['<Shift><Super>Home']
move-to-workspace-down=['<Shift><Super>Next']
move-to-workspace-up=['<Shift><Super>Prior']
show-desktop=['<Control>F3']
switch-to-workspace-1=['<Super>Home']
switch-to-workspace-down=['<Super>Next']
switch-to-workspace-up=['<Super>Prior']
switch-windows=['disabled']
switch-windows-backward=['disabled']
toggle-fullscreen=['<Control><Super>f']
toggle-maximized=['<Shift><Control>m']
toggle-shaded=['<Alt><Super>s']
unmaximize=['<Control><Alt>m']
Run Code Online (Sandbox Code Playgroud)

马可:

[org/mate/marco/global-keybindings]
cycle-group='<Primary>grave'
cycle-panels='disabled'
cycle-windows='<Alt>grave'
run-command-screenshot='<Primary><Shift>numbersign'
run-command-window-screenshot='<Primary><Shift>dollar'
show-desktop='<Primary>F3'
switch-group='<Alt>Tab'
switch-to-workspace-1='<Primary><Mod4>1'
switch-to-workspace-2='<Primary><Mod4>3'
switch-to-workspace-3='<Primary><Mod4>2'
switch-to-workspace-4='<Primary><Mod4>4'
switch-to-workspace-down='<Mod4>Down'
switch-to-workspace-left='<Mod4>Left'
switch-to-workspace-prev='<Shift><Mod4>Tab'
switch-to-workspace-right='<Mod4>Right'
switch-to-workspace-up='<Mod4>Up'
switch-windows='<Primary>Tab'

[org/mate/marco/window-keybindings]
activate-window-menu='disabled'
begin-move='<Primary><Shift><Mod4>m'
begin-resize='<Primary><Shift><Mod4>r'
close='<Primary>q'
maximize='<Alt><Mod4>m'
maximize-horizontally='<Alt><Mod4>h'
maximize-vertically='<Alt><Mod4>v'
minimize='<Primary>m'
move-to-corner-ne='<Alt><Mod4>2'
move-to-corner-nw='<Alt><Mod4>1'
move-to-corner-se='<Alt><Mod4>4'
move-to-corner-sw='<Alt><Mod4>3'
move-to-side-e='<Alt><Mod4>Left'
move-to-side-n='<Alt><Mod4>Up'
move-to-side-s='<Alt><Mod4>Down'
move-to-side-w='<Alt><Mod4>Right'
move-to-workspace-1='<Primary><Alt><Mod4>1'
move-to-workspace-2='<Primary><Alt><Mod4>2'
move-to-workspace-3='<Primary><Alt><Mod4>3'
move-to-workspace-4='<Primary><Alt><Mod4>4'
move-to-workspace-down='<Primary><Mod4>Down'
move-to-workspace-left='<Primary><Mod4>Left'
move-to-workspace-right='<Primary><Mod4>Right'
move-to-workspace-up='<Primary><Mod4>Up'
tile-to-corner-ne='<Shift><Alt>at'
tile-to-corner-nw='<Shift><Alt>exclam'
tile-to-corner-se='<Shift><Alt>dollar'
tile-to-corner-sw='<Shift><Alt>numbersign'
tile-to-side-e='<Shift><Alt>Right'
tile-to-side-w='<Shift><Alt>Left'
toggle-fullscreen='<Primary><Mod4>f'
toggle-maximized='<Primary><Shift>m'
toggle-shaded='<Alt><Mod4>s'
unmaximize='<Alt><Mod4>r'
Run Code Online (Sandbox Code Playgroud)