MENU

【ラズパイ】GUI上のターミナルで環境変数がうまく反映されるようにする

目次

概要

以前RaspberryPiを初めて触った際に、環境変数をGUI上のターミナル(lxterminal)から使おう!と思った時に、環境変数の設定でめちゃくちゃハマった。調べてみても、GUI上で動かしている記事がほとんど見つからなかったので、ハマった原因と解決策を書き残しておこうと思います。

この記事で何を解決できるか

RaspberryPiのGUIで動か

環境変数を登録したのに、再起動すると使えなくなった

RaspberryPiでpythonを使うときに、バージョン管理の為にpyenvを使うことに。pyenvの導入自体初めてだったので、色々なサイトをググりつつ、pyenvコマンドを使えるようにするため、~/.bash_profileファイルに環境変数を書き込みました。その後 source ~/.bash_profileコマンドを実行すると、無事pyenvコマンドが使えるように。

できた!とちょっと嬉しくなったのもつかの間。その後ラズパイを再起動してGUIからlxterminalを開いてpyenvコマンドを叩いてみると、”pyenv command is not found”(pyenvコマンドが見つかりません)というエラーが出る。なんでやね~~~ん!さっき書いたじゃん!

単純に環境変数を書き間違えた…?と思い、ファイルを確認してみるも、ちゃんと環境変数は書き込んである。試しにもう一度source ~/.bash_profileを実行すると、コマンドが使えるようになったのですが、再起動したらまた使えなくなる。

他の状況下でも試してみるために、GUIではなく、ラズパイのCUI上と、sshでgitbashからpyenvコマンドを叩いてみると…使える。再起動しても普通に使える。

ということはlxterminalで開いたときだけ、~/.bash__profileが読み込まれてないのでは…?と思ったので、あれやこれや調べてみると、どうやらログインシェル、非ログインシェルというものが原因らしいことがわかりました。

ログインシェル、非ログインシェルとは

ログインシェル

コンピューターを起動したときや、sshで接続したときに動いているシェルの事。コンピュータにログインした時点で動いてるシェル。ラズパイをCUIモードで起動したときも、ログインシェル。

非ログインシェル

ログインしてないシェルの事。

ログインシェルと非ログインシェルの大きな違いは、~/.bash_profileを読み込むかどうかです。

ログインシェルは~/.bash_profileを読み込んで、環境変数等の初期化処理を行います。非ログインシェルは~/bash_profileは読み込まず、_bashrcから読み込むそう。(詳しい読み込み順だったり、ログインシェルに関しての説明は、分かりやすい記事が沢山あるので別で調べてみてください…!)

ラズパイに入っているlxterminalは、非ログインシェルとして起動するらしいので、~/.bash_profileに書いていた環境変数が読み込まれなかった。

参考記事

あわせて読みたい
Raspberry PiのLXTerminalで~/.bash_profileが読まれないのでなんとかするメモ - 1ft-seabass.jp.MEMO Raspberry PiはGUIが分かりやすくLXTerminalというターミナルも使えるのですが、nodeを入れて$PATHでパスを通したのにうまく反映されないという困ったことがおきました。 R...

逆にCUIやSSHで試してみた時は、どちらもログインシェルとして起動していたので~/.bash_profileが読み込まれているため、pyenvが普通に使用可能だった、ということがわかりました。

解決策

lxterminal起動後、bash –loginでログイン状態にしてから使う!

lxterminalを開いた後にbash –loginを叩くことで、シェルにログインすることができる。ログイン時に~/.bash_profileが読み込まれるため、登録した環境変数も使えるようになります。

前例がほとんど出てこなかった理由

今回私と同じ状況の記事がほぼ出てこなかったのは、GUI上のターミナルを使うという状況がめちゃくちゃ少数派だったからだと思っています。ほとんどの人がラズパイの操作をsshとかvncとかCUIでやってるもんだから、GUIからpyenvとか使おうと思ってないっぽい…。思い返してみるとpyenvを使ってる記事で、GUI上のターミナルでpyenvを使ってる記事を見かけた覚えがないです。(私のリサーチ不足かもしれませんが。)

大抵は決まった処理を走らせるだけだと思うので、実際GUIで画面を出してわざわざ動かす必要は確かにないですよね…。ラズパイを触ること自体初めて、しかもシェルなんてほとんど使ったことがないドド初心者なので、画面が見えるGUIの方が圧倒的に馴染みがあります。できることならGUIで動かさせてくれ…と思い、頑なにGUIを使ってました…笑

また、今回ラズパイで作ろうと思っていたものが、pythonで作ったGUIのウィンドウをタッチパネルに表示させて操作を行うという物だったので、CUIではなくGUI上で動かすという方法をとっています。

ラズパイでGUIを使ってpyenvも使って、pythonファイルを実行しようという例もあまりないのかもしれませんね。みんなwebブラウザとかでアプリとか作るなら、GUI使う必要ないし…(2回目)

今回、先人の方々の記事を読み漁りながら、怖々黒い画面と英語と格闘しましたが、おかげでCUIに対する恐怖心が多少薄れたような気がします。CUIも、何やってるかが分かるのが楽しいですね…。中々このようなこともないかもしれませんが、同じような状況に陥った時の、解決策の一部になれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次