はじめに
たまにUbuntu標準のターミナルをぶち壊したくなるときがありませんか?
私はあります。そこで壊し方と直し方を練習しておきます。
環境
Ubuntu18.04 LTSを使っています。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.6 LTS
Release: 18.04
ターミナルを壊してみよう
以下のコマンドたちを実行すると壊れる。
これはデフォルトのPython3のバージョンを3.8に変更するだけのコマンドであり、一見害のない操作に見えるのが楽しい。
$ sudo apt install -y python3.8
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
$ sudo update-alternatives --config python3
実際に変更できたかどうかバージョンを確かめておく。
$ python -V
Python 3.8.0
確認が終わったら実際にターミナルが壊れたか確認してみよう!1
起動できなくなっていたら成功だ!おめでとう!
直し方と解説
Ubuntu18.04標準のターミナルである gnome-terminalがpythonの特定のバージョンに依存していることが原因である2。
Ubuntu18.04のpython3デフォルトバージョンは3.6.9であるので、これを変更すると不具合が生じるのだ。
エラーメッセージを見るためにはターミナルが必要なので、別のターミナルを用意して修正する。ここではVS Codeで修正していく。
まずはエラーメッセージを見てみる。
$ gnome-terminal
ImportError: cannot import name '_gi'
ImportErrorが起きていることが分かる。コードを見てみよう。
$ code /usr/bin/gnome-terminal
#!/usr/bin/python3
import string
以下ソースコードが続く
問題なのは一行目だ。ソースコードはUbuntu標準のPython3.6を前提としているが、先ほどpython3.8をデフォルトとしたので動作しなくなっている。そこでPython3.6を明示的に指定してやる必要がある。以下のように修正すれば解決する。
#!/usr/bin/python3.6
import string
以下ソースコードが続く
なお、Ubuntu16.04LTSを使用している場合はもう一つ手順が必要になる。エラーメッセージにも出ていた_giのパッケージを手動で移す必要があるようだ。Ubuntu16.04でターミナルを壊したい人は参考リンクを見てほしい。
あとがき
一見悪意のなさそうなコマンドでターミナルが壊れるのは気持ちがいいですね!もっと気持ち良い壊し方があったら知りたいです。よろしくお願いします。