This page looks best with JavaScript enabled

3行でUbuntuのターミナルを破壊しよう

 ·  ☕ 3 min read  ·  🐶 odanny · 👀... views

はじめに

たまに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

terminal-is-dead.png

起動できなくなっていたら成功だ!おめでとう!


直し方と解説

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でターミナルを壊したい人は参考リンクを見てほしい。


あとがき

一見悪意のなさそうなコマンドでターミナルが壊れるのは気持ちがいいですね!もっと気持ち良い壊し方があったら知りたいです。よろしくお願いします。


参考

1.Ubuntu worries | What’s with upgrading Python and gnome-terminal crashing? | by Haripriya Sridharan | Medium

2.ターミナルの突然死に備える | 絵とか言葉とか

3.update-alternativesの使い方 - gggggraziegrazie

4.Ubuntu で python3 のかんたんなバージョン切り替え - naya_hira’s diary


  1. Ctrl+Alt+Tでターミナルを開けるらしいです。知らなかった。 ↩︎

  2. どうでもいいけどUbuntuの一部がPythonで書かれているのは初めて知ったのでビックリした。 ↩︎

Share on

odanny
WRITTEN BY
odanny
自作キーボードはまり中