Ubuntu デスクトップを使っていて、変更したかった動作を(一応)解決できたので投稿
はじめに
普段使いにはThinkpad E480にUbuntu Desktop 16.04 を入れて使っています。(18.04への移行はタイミングを逃した...)
12.04から使い始めたのですが、基本的にUnity
は合わなかったのでGNOME
系のデスクトップを使っており、現在はMATE
を使っています。
自分に合う環境にしてしまえば良いので非常に気に入っているのですが、GNOMEの馴染めない機能に中ホイールクリックでペーストされる
という挙動があります。
この挙動が便利な時もあるんですが、特にコードを書いている時にエディタ上でされると謎のゴミコードが紛れ込むことが有り、邪魔されることが有りました。
んで、この設定を変えられないか調べたんですが、公式設定らしきものがなさそうで、小細工による回避策が幾つか見つかりました。
そのうちの一つは上手く動作したので、まとめておきます。
結構古いですが、 「中クリックでペースト」よ、さようなら? | スラド オープンソース 見る限りむしろこの機能が消える方向にあるようなんですが、使っている感じそうは思えないですね。
ちなみに、この記事の反応では機能残して欲しい派は割といるみたいですね。
環境
- Ubuntu 16.04
- GNOME 3.18.2
解決策:xbindkeysを使って、ミドルボタンクリック時の動作を変更する
disable middle-click paste in linux without disabling middle scroll でxbindkeys
の設定ファイルを公開されている方がいたので利用させていただきました。
-
xbindkeys
はマウスやキーボードのショートカットを設定できるツール -
xdotool
がキー操作等をエミュレートするためのツール -
xsel
がクリップボード操作
っていう感じですかね。今まで使ってなかったですが普通に便利そうですね。
使っている方の記事もありました xbindkeys + xdotoolを使い無変換キーを押すとAlt+Tabを実行 - Qiita
xdotoolを使ってコマンドラインからウィンドウを操作する | atominux
こんな感じで行けます
# 必要なソフトをインストール
$ sudo apt-get install xbindkeys xsel xdotool
# 設定ファイルに2行追加して保存
$ vi ~/.xbindkeysrc
"echo -n | xsel -n -i; pkill xbindkeys; xdotool click 2; xbindkeys"
b:2 + Release
# 適用
$ xbindkeys -p
xsel
の処理がいまいちわかってないですが、おそらくミドルボタンクリック時(離した時?)の処理を乗っ取ってxdotool
で必要なイベントのみをエミュレートしている感じですかね。
とりあえず問題なく動作しています。
あとは、~/.xsessionrc
にコマンドを書いておけばログイン時とかにやってくれるのでOKかと。
元記事では~/.bashrc
に書いてありましたが、bashの起動単位に呼ばれるのでそれは多分必要ないと思います。
# vi ~/.xsessionrc
xbindkeys -p
参考
disable middle-click paste in linux without disabling middle scroll
その他方法
他にも色々検索結果が出てきましたが、動かなかったりイマイチかなという方法なので未実施です。
gtk-enable-primary-pasteを設定する方法
gtk-enable-primary-paste
の値で設定できるみたいです。
これも ubuntu - gnome/gtk: disable middle click paste via terminal - Unix & Linux Stack Exchange で上がっていました
クリップボード - ArchWikiにも記載ありです。
ただ、私の環境では以下のようにキーがないとエラーが出てました。
$ gsettings set org.gnome.desktop.interface gtk-enable-primary-paste false
No such key 'gtk-enable-primary-paste'
Settings: GTK+ 3 Reference Manual によるとGNOME 3.4
以降に使えるオプションのようです。残念
Whether a middle click on a mouse should paste the 'PRIMARY' clipboard content at the cursor location.
Flags: Read / Write
Default value: TRUE
Since: 3.4
ちなみに、GNOMEのバージョンは/usr/share/gnome/gnome-version.xml
に書いてありました。私の場合は以下でした。
<?xml version="1.0" encoding="UTF-8"?>
<gnome-version>
<platform>3</platform>
<minor>18</minor>
<micro>2</micro>
<distributor>Ubuntu</distributor>
</gnome-version>
以下のようにgnome-tweak-tool
を使っても同じ設定が可能だと思います。
xorg - How do I disable middle mouse button click paste? - Ask Ubuntu
ただ、これもgnomeのバージョンなのか私の環境では動作しませんでした。一応起動はできて、設定メニューは出るんですが、他の項目含めて設定されている感じがしなかったです
あと、コマンド起動した場合も以下のエラーが出てたので諦めました。
$ /usr/bin/gnome-tweak-tool
WARNING : Shell not installed or running
WARNING : Error detecting shell
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/gtweak/tweaks/tweak_group_shell_extensions.py", line 275, in __init__
raise Exception("Shell not running or DBus service not available")
Exception: Shell not running or DBus service not available
WARNING : Shell not running
None
INFO : GSettings missing key org.gnome.nautilus.desktop (key computer-icon-visible)
Xmodmapでミドルクリックを無効化する方法
Xmodmapを使ってマウスの割当自体を変えてしまう方法も出てきました。結構いろんなサイトで紹介されていましたが、結局ミドルボタンクリックを無効化してしまうだけなので、単純にミドルボタンクリックが使えなくなります(新規タブを開くとか)。
それはあまりうれしくないです。
xorg - How do I disable middle mouse button click paste? - Ask Ubuntu
xmodmap -e "pointer = 1 25 3 4 5 6 7 8 9"
パッチを当てる方法
How to Disable Mouse Middle Click to Paste Feature in Linux で色々な方法がまとめられていました。
その中のFor Hardcore users: Patching the gtk source file
でlibgtk-3-0
にパッチを当てる方法が紹介されていましたが、ちょっと怖いのでやめておきました
おわりに
割とモヤモヤしていた設定が解決?したのでスッキリしました。
ちなみにQiitaでxdotool
とxbindkeys
のタグ合わせて6記事でした。
またニッチなところを攻めてしまった
参考
disable middle-click paste in linux without disabling middle scroll