Wonderful! WordPress

Ubuntuで起動ごとのPython壁紙チェンジャー

うわっ!まったくWordPress とは関係ないじゃないかっ!
ここのところ python とかUbuntu とかをよくさわっていることが多いからといって・・・。まぁ、ひまつぶしってことで。
Ubuntu の壁紙を自動的に変更するのは、ネットで調べていると色々とあるようです。標準でその機能が備わっているということを書いてあるサイトもあったのだけれど、やり方がよくわからなかった。一番、簡単なのはそれができるアプリケーションをインストールする方法みたい。が、これって、その壁紙を設定してあるファイルさえわかれば、さして難しいことでもなさそうな気がするのです。
gconftool-2 を使う、という記事をよく見たように思い、実際にやってみるもののやっこさんは無反応。which で確認してみるとコマンド自体は存在しているようなんだけれど。
自分の環境はUbuntu 18.04.4 LTS 64bit GNOME 3.28.2 ということです(なんだかひとごとね)。見放されたWindows7 の生まれ変わりです。8G のメモリーで64bit のOS となって元気に働いてくれています。(ちなみに現在のところ、Ubuntu 20.04 になってます)
で、調べてみるとgconftool-2GNOME 3 では機能せず、かわりにgsettings を使えとのこと。Ubuntu とのお付き合いの長い御方々には、ごく当然のことなのかもしれない。と、いうことで、いざ、実際にやってみるとあっけなく機能してくれて、壁紙は変わってくれました。しめしめと。
あとは python でディレクトリにある画像ファイルの一覧を取得して、乱数を発生させてその乱数により画像ファイルを指定。そして gsettings コマンドにて画像を指定、変更させれば、というところ。
ちなみに画像ファイルは普通に Pictures フォルダに入れてます。パスでいうと /home/ログインユーザー/Pictures/ですね。
そのディレクトリにあるファイル一覧の取得には glob が使えると。
で、python から端末においてコマンドを実行させるには subprosess を使えば良いとのことで。

import glob
import random
import subprocess

files = glob.glob( '/home/henohenomoheji/Pictures/*' )

if files :
    files_count = len ( files )
    tarnum = random.randint ( 0, files_count - 1 )
    tarimg = files[ tarnum ]

    subprocess.run( [ 'gsettings', 'set', 'org.gnome.desktop.background', 'picture-uri', tarimg ] )
    subprocess.run( [ 'gsettings', 'set', 'org.gnome.desktop.background', 'picture-options', 'stretched' ] ) 

そしてこれを起動時に自動的に実行させるバッチファイルにしこんでしまえば良いと。
ちなみにバッチファイルを起動時に自動的に実行させるには、メニューバーの「アプリケーションを表示する」->「自動起動するアプリケーションの設定」にて、追加するだけのこと。
Ubuntu マシンのモニターにはテレビを代用しているもので、色合いがね、ちょっとよろしくないのです。それゆえに、バッチファイルにてその色合いを少し修正しているもので、ちょうどというか、そのバッチファイルを使えばいいと。

#!/bin/bash

python3 /home/henohenomoheji/Documents/imgchange.py

sleep 10
xgamma -rgamma 1.190 -ggamma 0.910 -bgamma 0.970

えっ!たったこれだけ!
たかだかこれだけのことなのね~。

が、しかし、ちょっとまてよ、と。実はここからが本題。
そういえばネットで見たところに、何の言語かわからなかったけれど、コードを載せていたところがあった。
コマンドをそのまま使ってやっているように見えたけれど・・・。
もしかしたら Linux って端末でもいろいろできてしまうのでは?
と、なにげに思ってしまい、さっそく調べてみると、案の定、 Linux は色々できてしまうのですね。
変数も配列も乱数だって使えるし、ファイルの一覧なんてのはそのまま"ls" で取得すれば良いだけだし。な~んだ、python など使う必要などまったくなかったわけでした。あはっ!知らないってのはほんとに。えっ!むりやり python を使いたかったんだろ、って。そんなことは、あるかな~、まぁ、まだ付き合い始めたばかりだからおめこぼしを~。 ってことで、作り直したのでした。
やってることはおんなじ。普通に"ls"コマンドでそのディレクトリにあるファイルの一覧を取得して、変数に入れておく。この時、配列になっているのでその配列の個数を得る。そして 0 からその個数-1 までの間の数で乱数を発生させ、それによって得られた乱数で配列に入っている画像を指定する、と、まぁ、なんてことはないこと。
注意するのは、

  • 変数は代入することで定義。そのときは"$"は付けない。その変数を参照するときは"$"マークが必要。
  • その時、"=" の両側とも、スペースを入れてはいけない。
  • コマンドを指定する部分はバッククオート"`"でかこんでいること。バッククオートじゃなきゃだめ。
  • 配列の個数は"${#array[*]}"で得られる。
  • 文字列の連結は6行目のように文字列と変数をただつなげて記述するだけ。

そんなところ。
一番最後の行は画面の色を補正するコマンド。よくわからないけれど、sleep で少し待たせてから実行させないと、言うことを聞いてはくれない。

#!/bin/bash

array=(`ls /home/henohenomoheji/Pictures`)
listnum="${#array[*]}"-1
rndnum=$((RANDOM%+$listnum))
tarimg=/home/henohenomoheji/Pictures/${array[$rndnum]}

gsettings set org.gnome.desktop.background picture-uri $tarimg
gsettings set org.gnome.desktop.background picture-options 'zoom'

sleep 10
xgamma -rgamma 1.190 -ggamma 0.910 -bgamma 0.970

Take
 a
break!

Leave a Reply!

JavaScript is necessary to send a comment.
You can edit and delete your comment if you input a edit key.
Edit key is necessary for attesting you when you edit and delete it.
The tag of HTML cannot be used in comment.
When you comment for the first time, it is displayed after the approval of the administrator.
Because I cannot speak English so much, it takes time to answer.
Required fields are marked *.

※Please enter more than 5 characters only alphabets.
※Edit or delete are possible for 2000 days after approval.

*

♠Simplistic Comment User Editable v4.0

♠When visitors leave comments on the site this site collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.
♠This site does not use cookie when visitors leave comments and commenter edit comment.
♠This site uses Akismet to reduce spam. Learn how your comment data is processed.

Comments feed

Trackback URL : https://strix.main.jp/wp-trackback.php?p=157299

Sanbanse Funabashi
2011.01.01 sunrise

Top

スクロールさせるか画像をクリックすると元に戻ります。