以前、Openboxログイン時間制限用のスクリプトを書いたという記事で息子がゲーム(Minetest)をするのに時間制限を加えるためのスクリプトを作成した件を書いた。ゲーム専用のアカウントを用意し、そこでスクリプトを自動起動させ、1週間の制限時間を超えたら強制的にログアウトするように設定したものだ。これに関しては、毎週月曜日に制限がリセットされるようにしていたのを毎週日曜にするよう息子から要望があった程度で、まあ順調に作動している。
さて、このスクリプト作成の伏線は「MinecraftもどきのMinetestに息子がはまった」という件だったわけだが、その後、Mincraftが課金型ゲームだというのは私の誤解だったことがわかり、また、当初に支払うアカウント作成のための料金約3000円を息子が自分で負担することを約束したので、Minecraftで遊ばせることを承認した。その際、Minetestはどうするかと尋ねたら、そっちはそっちで引続き遊びたいという。別々に制限をかけたらややこしいので、まとめて制限をかけたい。それならば、以前、Minetest専用に作成したアカウントでMinecraftも遊ばせるようにすればいい。
Minetestを専用アカウントで使用するようにしたのは、もともとはUbuntuの場合、英語環境のアカウントでなければUIが崩れてしまうというバグがMinetestにあったからだ。それを逆手にとったとも言える。通常のアカウントから起動したのでは遊べないから、専用アカウントに行かねばならず、そこで時間制限を受けるという算段だ。Minecraftに関しては、以前はLinux環境へのインストールにそれなりの手数が必要だったようだが、いまではリポジトリにMinecraftを自動でインストールしてくれるプログラムが用意されている。だからソフトウェアセンターなりパッケージマネージャなりからクリックひとつでインストールできるのだが、そうやってしまうと全てのアカウントからMinecraftが遊べてしまう。
それでは困るので、ここは手作業でMinecraftの公式サイトからLinux用のパッケージをダウンロードし、それをスクリプトから起動してやることにした。こうすれば、それ相応の知識がない限り、他のアカウントからはMinecraftが起動できない。どうしても専用アカウントに縛られるから、そこで時間制限を逃れられなくなるはずだ。
そういう方針を立てたとき、ここで必要になるのはOpenboxで起動するように設定してある専用アカウントにランチャーを用意してやることだと気がついた。専用アカウントにログインすると、自動でランチャーが立ち上がる。そのランチャーからはMinetestかMinecraftが選べるようになっていて、どちらかを起動して遊ぶ。それ以外の起動方法はわからなくしておけば、息子はこのルートをとらざるを得ないから、制限時間以上には遊べないだろう。
ということで適当なランチャーを探したのだけれど、たかがゲーム2つを起動するためだけの最小限の機能のランチャーなんて、かえって見つからない。それならばPythonで書いてやろうと、また素人のプログラミングをやったのが下記のスクリプトだ。
#!/usr/bin/python
# coding: UTF-8
import os;
import ConfigParser
from Tkinter import *
if __name__ == "__main__":
inifile = ConfigParser.SafeConfigParser()
inifile.read("/home/~/config.ini")
totaltime = int(inifile.get("int","totaltime"))
if totaltime > 299:
elapsedtime = "今週の残り時間はありません。"
else:
elapsedtime = str(totaltime/60)+"時間"+str(totaltime -
int(totaltime/60)*60)+"分過ぎました。残り" + str(4-totaltime/60)+"時間"+str(59 -
(totaltime - int(totaltime/60)*60))+"分です。"
def craft():
os.system( "bash /home/~/mclaunch.sh")
def mtest():
os.system( "minetest")
class MyApp:
def __init__(self, parent):
self.myParent = parent
self.myContainer1 = Frame(parent)
self.myContainer1.pack()
button_name = "MineCraft"
self.button1 = Button(self.myContainer1,
command=self.buttonHandler(button_name, 1, "MineCraft"))
self.button1.configure(text=button_name, padx=80, pady=20, command=craft)
self.button1.pack(side=LEFT,padx=50, pady=50)
button_name = "MineTest"
self.button2 = Button(self.myContainer1,
command=self.buttonHandler(button_name, 2, "MineTest"))
self.button2.configure(text=button_name, padx=80, pady=20, command=mtest)
self.button2.pack(side=LEFT,padx=50, pady=50)
def buttonHandler(self, arg1, arg2, arg3):
print ""
def buttonHandler_a(self, event, arg1, arg2, arg3):
print ""
root = Tk()
root.title(elapsedtime)
myapp = MyApp(root)
root.mainloop()
息子の要望で、残り時間が表示されるようにしておいたが、これは以前の制限スクリプトで用意したconfig.iniという初期設定ファイルを読み込むことで対応している。再読み込みはしていないので表示される残り時間はログイン時点でのものだが、それでも十分だろう。なお、例によって素人のプログラムなのでサンプルから取り込んだ際に不要になった行もいくつか残っている。その他にも恥ずかしい間違いは多々あると思うが、何にしても一応は動くので、公開しておく。なお、スクリプト中のmclaunch.shというのはMincraft起動用のスクリプトである。
ゲームを制限したら、今度はYouTubeにはまりだした。一応こちらも制限はかけているのだけれど、なかなかうまく運用できていない。その話はまた別の機会に書くことにしよう。
【関連する記事】
- touchpad-indicatorの追加
- 久々にXfceを使ってみた
- Utauを入れてみた
- Vivaldiを使ってみている
- AmazonのKDPで電子出版
- BitnamiでModxを使ってみた
- Kdenliveで字幕入れ
- Openboxログイン時間制限用のスクリプトを書いた
- タッチパッドの有効・無効を切り替えるツール
- lxdeでペアレンタルコントロール
- synfig studioでアニメ制作
- LibreOfficeで数式を組む
- 数学の問題作成にStixフォント
- なんちゃってAndroidアプリの開発 - その2
- なんちゃってAndroidアプリの開発 - その1
- Soxは便利
- PDFの文字入れならXournal
- Karbonが思いがけず使えた。
- WineでInDesign - WindowsユーザーがUbuntuに乗り換える..
- soxでカセットテープ音源のスピード調整