GNOMEのミドルボタンクリックでペーストを無効化したい

Ubuntu デスクトップを使っていて、変更したかった動作を(一応)解決できたので投稿

# はじめに

普段使いにはThinkpad E480にUbuntu Desktop 16.04 を入れて使っています。(18.04への移行はタイミングを逃した...)  

12.04から使い始めたのですが、基本的に`Unity`は合わなかったので`GNOME`系のデスクトップを使っており、現在は`MATE`を使っています。  

自分に合う環境にしてしまえば良いので非常に気に入っているのですが、GNOMEの馴染めない機能に`中ホイールクリックでペーストされる`という挙動があります。  
この挙動が便利な時もあるんですが、特にコードを書いている時にエディタ上でされると謎のゴミコードが紛れ込むことが有り、邪魔されることが有りました。

んで、この設定を変えられないか調べたんですが、公式設定らしきものがなさそうで、小細工による回避策が幾つか見つかりました。
そのうちの一つは上手く動作したので、まとめておきます。


結構古いですが、 [「中クリックでペースト」よ、さようなら？ | スラド オープンソース](https://opensource.srad.jp/story/13/09/25/0419255/) 見る限りむしろこの機能が消える方向にあるようなんですが、使っている感じそうは思えないですね。
ちなみに、この記事の反応では機能残して欲しい派は割といるみたいですね。



# 環境

* Ubuntu 16.04
* GNOME 3.18.2



# 解決策：xbindkeysを使って、ミドルボタンクリック時の動作を変更する

[disable middle-click paste in linux without disabling middle scroll](https://gist.github.com/sam0x17/f1d89df55778e4317d8974623a62e8c6) で`xbindkeys`の設定ファイルを公開されている方がいたので利用させていただきました。

- `xbindkeys`はマウスやキーボードのショートカットを設定できるツール
- `xdotool`がキー操作等をエミュレートするためのツール
- `xsel`がクリップボード操作

っていう感じですかね。今まで使ってなかったですが普通に便利そうですね。

使っている方の記事もありました [xbindkeys + xdotoolを使い無変換キーを押すとAlt+Tabを実行 - Qiita](https://qiita.com/tukiyo3/items/6b6e91cf86aab87fd0ba) 
[xdotoolを使ってコマンドラインからウィンドウを操作する | atominux](http://atomiyama.com/linux/page/xdotool-00/)


こんな感じで行けます

```bash
# 必要なソフトをインストール
$ sudo apt-get install xbindkeys xsel xdotool

# 設定ファイルに２行追加して保存
$ vi ~/.xbindkeysrc
"echo -n | xsel -n -i; pkill xbindkeys; xdotool click 2; xbindkeys"
b:2 + Release

# 適用
$ xbindkeys -p
```

`xsel`の処理がいまいちわかってないですが、おそらくミドルボタンクリック時(離した時？)の処理を乗っ取って`xdotool`で必要なイベントのみをエミュレートしている感じですかね。
とりあえず問題なく動作しています。

あとは、`~/.xsessionrc`にコマンドを書いておけばログイン時とかにやってくれるのでOKかと。
元記事では`~/.bashrc`に書いてありましたが、bashの起動単位に呼ばれるのでそれは多分必要ないと思います。

```console
# vi ~/.xsessionrc
xbindkeys -p
```


参考


[disable middle-click paste in linux without disabling middle scroll](https://gist.github.com/sam0x17/f1d89df55778e4317d8974623a62e8c6)

# その他方法

他にも色々検索結果が出てきましたが、動かなかったりイマイチかなという方法なので未実施です。


## gtk-enable-primary-pasteを設定する方法


`gtk-enable-primary-paste`の値で設定できるみたいです。

これも [ubuntu - gnome/gtk: disable middle click paste via terminal - Unix & Linux Stack Exchange](https://unix.stackexchange.com/questions/443066/gnome-gtk-disable-middle-click-paste-via-terminal?noredirect=1&lq=1) で上がっていました

[クリップボード - ArchWiki](https://wiki.archlinux.jp/index.php/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%89)にも記載ありです。

ただ、私の環境では以下のようにキーがないとエラーが出てました。

```
$ gsettings set org.gnome.desktop.interface gtk-enable-primary-paste false
No such key 'gtk-enable-primary-paste'
```


[Settings: GTK+ 3 Reference Manual](https://developer.gnome.org/gtk3/stable/GtkSettings.html#GtkSettings--gtk-enable-primary-paste) によると`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
<?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](https://askubuntu.com/questions/4507/how-do-i-disable-middle-mouse-button-click-paste)

ただ、これもgnomeのバージョンなのか私の環境では動作しませんでした。一応起動はできて、設定メニューは出るんですが、他の項目含めて設定されている感じがしなかったです

あと、コマンド起動した場合も以下のエラーが出てたので諦めました。

```bash
$ /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](https://askubuntu.com/questions/4507/how-do-i-disable-middle-mouse-button-click-paste)

```
xmodmap -e "pointer = 1 25 3 4 5 6 7 8 9"
```

## パッチを当てる方法

[How to Disable Mouse Middle Click to Paste Feature in Linux](https://www.maketecheasier.com/disable-middle-mouse-click-to-paste-feature-in-linux-quick-tips/) で色々な方法がまとめられていました。

その中の`For Hardcore users: Patching the gtk source file`で`libgtk-3-0`にパッチを当てる方法が紹介されていましたが、ちょっと怖いのでやめておきました


# おわりに

割とモヤモヤしていた設定が解決？したのでスッキリしました。

ちなみにQiitaで`xdotool`と`xbindkeys`のタグ合わせて６記事でした。  
またニッチなところを攻めてしまった


# 参考

[disable middle-click paste in linux without disabling middle scroll](https://gist.github.com/sam0x17/f1d89df55778e4317d8974623a62e8c6)




[クリップボード - ArchWiki](https://wiki.archlinux.jp/index.php/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%89)

[xbindkeys + xdotoolを使い無変換キーを押すとAlt+Tabを実行 - Qiita](https://qiita.com/tukiyo3/items/6b6e91cf86aab87fd0ba) 

[xdotoolを使ってコマンドラインからウィンドウを操作する | atominux](http://atomiyama.com/linux/page/xdotool-00/)