LoginSignup
34
29

More than 3 years have passed since last update.

LinuxでMacっぽくCmd,Ctrlキーを使い分ける

Last updated at Posted at 2019-11-19

はじめに

Ubuntuを始めとしたLinux環境において、TerminalでのコピーはCtrl+Shift+C、貼り付けはCtrl+Shift+Vです。
テキストエディタやWebブラウザなど、一般的にコピーはCtrl+C、貼り付けはCtrl+Vですが、Terminal上では制御コマンドと被るため、例外的にShiftを追加で押す必要があります。

その反面MacはCtrl ⌃Cmd ⌘の2つがあり、CtrlはTerminal上での制御、Cmdは汎用ショートカットキーとしての棲み分けがなされています。

MacとLinuxを両方使っている私としては、「Terminal使ってる時だけshift押さないといけないのは面倒」と感じ、LinuxでもMacと同じようなショートカットキーを使い分けれたらどんなに楽かと、「Linux cmd ctrl like mac」みたいな記事を片っ端から読み漁りましたが、私の知る限りでは国内では的を射た記事がありませんでした。
しかしながら、海外の質問サイト にて個人的な最適解を発見しましたので、ここに書き置きとして説明を残したいと思います。

環境

  • Ubuntu 18.04 LTS
  • Thinkpad X270

外観はTweaksでMacOS風にしてます(参考

実装方法

CapsLockをHyperキーに置換

CapsLockHyperに置き換え、Macで言うところのctrl ⌃として使用します。
使用頻度はさほど高くないため大抵は問題ないかと思いますが、CapsLockを殺したくない方はキーマップの変更なりをして下さい。
Tweaksが未インストールの場合は

sudo apt -y install gnome-tweak-tool

を叩いてください。

キーボードとマウス
$\rightarrow$追加のレイアウトオプション
$\rightarrow$Caps Lock Behavior
$\rightarrow$Caps Lockを追加のHyperにする

と設定することでCapsLockHyperに設定します。

Superキー系ショートカットのコンフリクト対策

HyperSuper(Windowsキー)と似たような動作をし、Hyper+Lなどを入力するとSuper+Lと同じ「画面をロック」が働いてしまいます。
設定次第では完全に分離することも可能かもしれませんが、個人的にSuperはあまり使わないので、Linuxの設定画面で
Super+[A-Z]
Super+Shift+[A-Z]
に変更します。
Screenshot from 2019-11-19 20-10-36.png

Autokeyのインストール

Autokeyとは、予め登録しておいた文字列やショートカットキーを入力することで、それに対応した文字列・スクリプトが出力されるツールです。公式はここ

 sudo apt -y install autokey-gtk

でインストールできます。

使用方法

前準備

Autokeyは~/.config/autokey/data下にデータが保存されます。

mkdir ~/.config/autokey/data/ctrl-hyper

で今回作成するスクリプトのフォルダを作成します。

作成できたらAutokeyを開きます。
Screenshot from 2019-11-19 18-02-46.png

Scriptの登録

ctrl-hyperフォルダをクリックし、
新規$\rightarrow$Script
とすることでに上にScriptファイルを作成します。

ここではkillコマンドのスクリプトを例として作成します。

  1. script code欄に keyboard.send_keys("<ctrl>+c")を入力
  2. Hotkeyに<hyper>+cを設定
  3. Window FilterでDetect Wondow Properiesを選択し、常用しているTerminalのウインドウをクリック(注意!(後述))
    gnome-terminalを使っている場合はgnome-terminal-server.Gnome-terminalと入力してもよいです。

Screenshot from 2019-11-19 20-13-35.png

※注意!
Detect Wondow Properiesでウインドウをクリックしてもautokey.Autokeyが返ってくる場合があります。そのときは

xprop | grep WM_CLASS
# >>> WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal"

とTerminalに打ち、1つ目の返り値がインスタンス名、2つ目がクラス名に相当しますので、
インスタンス名.クラス名 をAutoKeyのフォームに入力します。


これでHyper+Cを押すことは、Terminal上ではCtrl+Cと同じ扱いとなり、killコマンドが送られることになります。

これをコピーコマンドも同様にScriptを新規作成し、
script_code : keyboard.send_keys("<ctrl>+<shift>+c")
Hotpey: <ctrl+c>
Window Filter: gnome-terminal-server.Gnome-terminal
と設定します。

以上の2つのScriptによって、Terminal上では
Ctrl+CコピーHyper+Ckill
といった、Macとほぼ同じショートカットが実現します!!

これに加え、Ctrl+Vや、emacs由来のなどのカーソル移動系ショートカットも同様に2つのScriptを作成します。

備考&手作業の設定が面倒な貴方に

AutoKeyは1つのScriptにつき、pythonとjsonの2ファイルが生成されます。
Window Filterでは正規表現を使ったウインドウの指定が可能ですので、
「TerminalとVScodeでこのScriptを使いたい!」ってときとかは
gnome-terminal-server.Gnome-terminal|code.Code
でOKです。

いちいちGuiで登録するのが面倒な人は GitHub にファイル一式をおいていますので参照してください。

参考

34
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
29