turtlechanのブログ

無知の私がLinuxをいじりながら書いていくブログ

【Linux】Debian の lightdm が .bash_profile(.profile) を読み込まない

特に理由もなくディスプレイマネージャーを「lightdm」に変更したら、「.bash_profile」を読み込んでくれなくなった。

解決方法を探すのに苦労したので、タートルちゃんブログに記事として残しておこうと思います。

まえおき

私が普段使っている Debian のディスプレイマネージャーを「lightdm」に変更しました。
インストールする際にデフォルトで起動するディスプレイマネージャーの選択画面が表示され、問題なくインストールが完了し、起動も問題ないと思っていました。
しばらく使って気づいたんですが、「.bash_profile」に書いている環境変数(PATH)が反映されていなかったのです。私は普段 pyenv を愛用しているのですが見つからないという。。。

ちなみに変更前は「sddm」を使っていました。
その時は「.bash_profile」も正常に読み込まれていました。つまり「lightdm」のせいで読み込まれなくなったわけです。

「.bash_profile」を「.profile」に変更しても読み込まれませんでした。
どうやら Debianlightdm はログイン時にプロファイルファイルを読み込まなくなるようだ。

余談

Debianbash は「.bash_profile」が現役ですが、Ubuntu の場合は「.bash_profile」ではなく「.profile」に変更になっていたかと思います。
Ubuntu の方は「.bash_profile」で書くと読み込まれないので「.profile」にしましょう。それで解決するはず。

解決方法

細かいことはどうでもよい。

.bash_profile の場合、以下のコマンドを実行。

$ echo '. $HOME/.bash_profile' >> ~/.xsessionrc

.profile の場合は、以下のコマンドを実行する。

$ echo '. $HOME/.profile' >> ~/.xsessionrc

上記のコマンド実行後、ログアウト&ログイン もしくは 再起動すればプロファイルが読み込まれる。
環境変数(PATH)も反映されているはずです。

何をしているか

ホームディレクトリ直下の「.xsessionrc」に

. $HOME/.bash_profile

の一行を追記(.xsessionrcファイル が存在していない場合は作成)しています。
行頭の .(ドット) はコマンドでいう source です。間違えじゃないので消さないようにね。

 

「.xsessionrc」って何か
GUI起動をすると必ず実行される(だろう)設定ファイル という認識しかありません。
私は詳しいことは何も知りません。私の知っていることをここに書くよりも、ググった方が詳しいだろうし分かりやすいはずです。

おわりに

.bash_profile を通らないなら、.xsessionrc(必ず通る道)で指示しよう的な、当たり前そうな解決策です。

そもそも .bash_profile が読み込まれるのが当たり前だと思っていたので、記述や設定の間違いを疑っていました。そして多くの時間を無駄にした。
思い込みって怖いですね。

 

他にもっと良い解決方法あるよってのがあれば、教えてください。

 

何かの参考になれば幸いです。

Pythonで無尽蔵から株価データをダウンロード(修正)

いつも私がお世話になっている 汲めども尽きない 無尽蔵 さん。
どうやら今年から株価データのダウンロードURLが変更になったようです。

以前私が書いた記事のスクリプトでは駄目になってしまったので、サクッと書き直してみようかなと。
最低限しか書きませんが、参考になれば幸いです。

ちなみに、新しくなったダウンロードURLは 無尽蔵さんのおしらせ帳のページ で確認できます。

※python2で書いてます。

変更されたところ

お知らせには

■新年よりデーター取得アドレスが変更になりました。
当日データー(2020年1月6日の例)
http://mujinzou.com/d_data/2020d/20_01d/T200106.zip

過去株価データー(2020年1月6日の例)
http://mujinzou.com/k_data/2020/20_01/T200106.zip

日経先物(分足)(2020年1月6日の例)
http://mujinzou.com/k_data/2020/NS2001/NSL_200106.zip

ミニ先物(分足)(2020年1月6日の例)
http://mujinzou.com/k_data/2020/NS2001/NSM_200106.zip


■掲載の継続は保証出来ませんので、ご承知おき下さい。
 データー保管の意味合いから、掲載時刻は当日でない
 場合もあり、当日更新の約束はできません。

と書かれていました。

過去株価データで言うと、以前は「http://souba-data.com/k_data/2015/15_01/T150105.zip」でした。

ドメイン名が「souba-data」から「mujinzou」に変更になっただけで、ファイル名など大きな変更はなさそうです。

 

で、■新年よりデータ取得アドレスが変更になりました。の一文。
「今年からのデータの取得アドレス」なのか、
「今年から過去データすべての取得アドレス」なのか、
いまいち分からなかったので少し調べてみました。

  • 2020年 と 2019年 のファイルは、新しいドメイン名(mujinzou.com)
  • 2018年以前のファイルは、旧ドメイン名(souba-data.com)

でした。データの移行の問題かもしれませんので、今後変更になるかも?
それと、2014年以前は圧縮形式が lzh ですが無視します(面倒くさいので)。

日足データのダウンロード

以上を踏まえてpythonで書いてみました。

mujinzou.py
#! /usr/bin/env python
# coding: utf-8

import os
import codecs
import zipfile
import requests


class Mujinzou(object):
    ''' 無尽蔵のクラス '''

    def __init__(self):
        ''' 初期化メソッド '''
        pass

    @classmethod
    def dl(cls, savePath='./', date_str='2015-01-05'):
        ''' 日足データの保存 '''
        if not os.path.isdir(savePath):
            os.makedirs(savePath)
        year, month, day = date_str.split('-')
        fileName = 'T{0}{1}{2}.zip'.format(year[-2:], month, day)
        filePath = os.path.join(savePath, fileName)
        # ここから修正部分
        if int(year) < 2019:
            url = 'http://souba-data.com/k_data/{0}/{1}_{2}/{3}'.format(year, year[-2:], month, fileName)
        else:
            url = 'http://mujinzou.com/k_data/{0}/{1}_{2}/{3}'.format(year, year[-2:], month, fileName)
        # ここまで修正部分
        response = requests.get(url)
        if response.status_code != 200:
            raise
        with codecs.open(filePath, 'w', encoding=None) as f:
            f.write(response.content)
        return filePath

    @classmethod
    def load(cls,  path='./', date_str='2015-01-05'):
        ''' 戻り値 {code: [open, high, low, close, volume]} '''
        dic = {}
        year, month, day = date_str.split('-')
        fileName = 'T{0}{1}{2}.zip'.format(year[-2:], month, day)
        with zipfile.ZipFile(os.path.join(path, fileName), 'r') as zf:
            for row in zf.open(zf.namelist()[0]):
                row = row.split(',')
                dic[row[1]] = row[4:9]
        return dic


def main():
    import time
    Mujinzou().dl()
    time.sleep(5)
    Mujinzou().dl(date_str='2018-01-04')
    time.sleep(5)
    Mujinzou().dl(date_str='2019-01-04')
    time.sleep(5)
    Mujinzou().dl(date_str='2020-01-06')


if __name__ == '__main__':
    main()

直接スクリプトを実行すれば 2015-01-05 と 2018-01-04, 2019-01-04, 2020-01-06 の株価データがダウンロードできるので問題なさそうです。

以前の記事のスクリプトを修正しただけなので、動作は過去記事を読んで下さい。

turtlechan.hatenablog.com

また何かあっても私は保証できませんので、サーバーの負荷など十分考慮してください。

おわりに

何かの参考になれば幸いです。

また、汲めども尽きない 無尽蔵 さまには日々感謝しております。
益々のご活躍をお祈り申し上げます。 これからもよろしくお願いいたします。

【Linux】Calibre でkindle本の DRM を解除する方法メモ

LinuxDRM を解除しようとしたら設定に少し手間が掛かった。
再設定するころには忘れていると思うので、備忘録として記事に残すことにした。

はじめに

Windows では問題なく DRM 解除ができていた。
Linux では Amazon Kindle をwine上で動かしているので Calibreプラグイン DeDRM_plugin が「kindlekey1.k4i」を上手く取得できないのが問題の模様。

 

結論を言うと Amazon Kindle をインストールしているwineに Python2 をインストールして DeDRM_tools_x.x.x.zipに含まれている「kindlekey.pyw」をwine上で実行すればいい。
そして生成された kindlekey1.k4i を DeDRM_plugin に読み込ませる。

DRM を解除する

LinuxCalibre, DeDRM_plugin、 wine上に Amazon Kindle がすでにインストールされていることを想定して書いています。まだの場合は下のおまけの部分を読んでください。

wine上に Python2 をインストール

インストーラーのダウンロード

python2 のインストーラーをダウンロードします。

※私は python 2.7.15 をインストールしていますが、2.7 なら他のでも大丈夫だと思います。

Download Python | Python.org
URL: https://www.python.org/downloads/

上記のサイトに飛んで、Python 2.7.15 の Download をクリック。

Download Python の画面01

Files の「Windows x86 MSI installer」をクリック。

Download Python の画面02

ダウンロードされますので、ホームディレクトリ(~)にでも保存して下さい。

インストール

wineで python2 のインストーラーを起動して、wine上にインストールします。

以下のコマンドを実行。

~$ wine msiexec /i python-2.7.15.msi

インストーラーが立ち上がるので、特に何も変更せずインストールします。問題なくインストールが完了するはず。

kindlekey1.k4i の生成

DRM 解除のための鍵となるファイル kindlekey1.k4i を生成します。

DeDRM_tools のダウンロード

DeDRM_tools に含まれる python スクリプトを使用するので、以下のサイトからダウンロードします。

Releases · apprenticeharper/DeDRM_tools · GitHub
URL: https://github.com/apprenticeharper/DeDRM_tools/releases

バージョンは最新版で問題ないと思います。ホームディレクトリ(~)にでも保存してください。

DeDRM_tools · GitHub 画面01

kindlekey1.k4i を生成

以下のコマンドで、ダウンロードしたファイルを解凍、
今回必要なファイルは「kindlekey.pyw」です。それだけを解凍してます。

~$ unzip -j ~/DeDRM_tools_6.6.3.zip "Other_Tools/DRM_Key_Scripts/Kindle_for_Mac_and_PC/kindlekey.pyw"

※ダウンロードしたzipファイルはホームディレクトリ(~)に保存したと仮定しています。

wine上の Python2 で「kindlekey.pyw」を実行します。
次のコマンド。

~$ wine python ~/kindlekey.pyw

成功すると以下のウィンドウが出ます。

kindlekey.pyw の成功画面

ホームディレクトリ内に「kindlekey1.k4i」が出来ているはずです、確認してみてください。

CalibreDRM 解除

Calibre に上記で生成した「kindlekey1.k4i」を読み込ませ、DRM を解除できるようにします。

Calibre に kindlekey1.k4i を読み込ませる

Calibre を起動して「設定」をクリック。

calibre の画面01

設定画面が出てくるので、高度な設定の「プラグイン」をクリック。

calibre の画面02

プラグイン画面が出てくる。
DeDRM を選択して「プラグインをカスタマイズ」をクリック。

calibre の画面03

DeDRMの設定画面、「Kindle for Mac/PC ebooks」をクリック。

calibre の画面04

「Import Existing Keyfiles」をクリック。
ファイラーが起動するので、上記で生成した「kindlekey1.k4i」を選択します。

calibre の画面05

先程まで空白だったところに「kindlekey1」が追加されているはず。

calibre の画面06

あとは閉じてください。以上で「kindlekey1.k4i」の読み込みは完了です。次回から CalibreKindle本 を開くと自動で DRM が解除されるようになります。
また、DeDRM に kindlekey1.k4i を読み込ませたら、kindlekey1.k4iファイル はもう必要ないので削除して問題ありません。

ちなみに、「WINEPREFIX:」のところに正しいwineのパスを書いて追加ボタン(+)をクリックしても kindlekey1.k4i は生成できませんでした。あとwineのディレクトリ構造が変になったりするので追加ボタン(+)はクリックしない方がいいと思います。

DRM を解除してみる

wine上の Kindle for PC でダウンロードしたファイルを Calibre で開けば自動で DRM を解除してくれます。
フォーマットが「AZW3」になっていれば解除が成功しています。

calibre の画面07

calibre の画面08

おまけ

wineのインストール

wineにもバージョンは色々あるが私は気にしない。

Debian

~$ sudo apt-get install wine

RHEL系は少々面倒だった気がするので割愛。

Amazon Kindle のインストール

wine上で動かすには 1.17.x が安定していたと思う。この記事を書いている時点では問題なく同期可能。
どこからかインストーラーをダウンロードして来てください。一応現時点でダウンロードできる URL を書いておきますが、問題が起きても自己責任でお願いします。

Kindle for PC 1.17.44183
URL: http://www.mediafire.com/file/ku208jm2ccqvn1w/KindleForPC-installer-1.17.44183.exe/file

wineでインストーラーを起動してインストール。

~$ wine KindleForPC-installer-1.17.44183.exe

Calibre のインストール

Debian

~$ sudo apt-get install calibre

RHEL系は割愛。

DeDRM_plugin のインストール

以下から DeDRM_tools_x.x.x.zip をダウンロードします。バージョンは最新版でいいんでね?

Releases · apprenticeharper/DeDRM_tools · GitHub
URL: https://github.com/apprenticeharper/DeDRM_tools/releases

ダウンロードしたファイルを解凍しておきます。

 

Calibre を起動して
設定→プラグイン→ファイルからプラグインを読み込む
DeDRM_calibre_plugin フォルダ内の「DeDRM_plugin.zip」を選択
Calibre を再起動で完了です。

おわりに

wine上に pycrypto もインストールしているのを見るが、私の場合はインストールせずにできた。この辺はよく分かってないです。

wine上で安定して動く Kindle for PC 1.17 がいつまでサポートされるか分からない所が不安ですね。

何かの参考になれば幸いです。