ラベル Ubuntu の投稿を表示しています。 すべての投稿を表示
ラベル Ubuntu の投稿を表示しています。 すべての投稿を表示

2023年2月7日火曜日

Ubuntu22.04でPeekが使えないので GDK_BACKEND=x11 peekで動作した

Peekを使ってGIFを作ろうとするとき、真っ黒な画面が保存されてしまっていました。


 GDK_BACKEND=x11 peek

でターミナルから起動したらできました。Wayland対応の問題らしいです。

https://github.com/phw/peek/issues/33#issuecomment-281662688

2023年1月22日日曜日

Chrome拡張開発でタブが無限に開いてしまうのをPreferencesをいじって直した

(Ubuntu22.04)

Chrome拡張を作っていて、background.jsにタブを開くコードを書いてしまって無限ループしていました。 

できた方法

.config/google-chrome/Default/Preferences

の中にextensionの情報がはいっているので探します。アップロードしたフォルダ名で見つかるはずなので、そのフォルダ名を変更する。state を変えたり、permissionを変えても変化ありませんでした。


できなかった方法

chromeを再インストール

incognito modeで開く

shift escでChromeマネージャを開いて止める(メモリが少ないのですぐ固まる、タブが開くのが早すぎておいつけない。メモリが強ければ試せるかも?)


参考にしたもの

https://mikomon.hatenablog.jp/entry/2020/12/14/033558

上記にあったextension無視して開くコマンド --disable-extensions

https://superuser.com/questions/254579/how-to-open-google-chrome-with-extensions-disabled-turned-off

2022年4月15日金曜日

Ubuntuマウスカーソルを赤く大きくするメモ


◆マウスカーソル赤くする

Tweaks

Appearance

Cursor Yaruから -> Redglassにする


◆マウスカーソル大きくする

Universal Access

Seeing

Cursor size (default は一番小さい)-> Larger(右から2番目)


Command Lineで即時変更はできないようです。 

2022年2月20日日曜日

UbuntuのBackups(Deja Dup)メモ

使い方

以下がとても参考になった。

https://www.howtoforge.com/tutorial/ubuntu-backup-deja-dup/

インストール

sudo apt-get install deja-dup

設定(保存対象、保存先、頻度、暗号化)

リストア 一部だけでも気軽にできます。時間かかりますが。

- 起動して、Restoreをクリックして準備(少し時間かかる。〜1時間とか)

- いつのスナップショットを復元するか

- 保存されているフォルダからどれを復元するかを選べる。復元の保存先も選べる。リストアは、対象が一部でも、時間がかかります。


除外するもの

.vscode/extensions

.config/google-chrome

.npm

.nvm

.pyenv

.venv


全てのnode_modules/フォルダを除外する


.deja-dup-ignore

を各ディレクトリに置くのがよい
https://gitlab.gnome.org/World/deja-dup/-/issues/162


エラー

Another duplicity instance is already running with this archive directory というエラーが出るので、

ps ax | grep -E -i 'deja-dup|duplicity' | grep -v grep

これでpid調べて消して再実行すれば動きました。

https://www.nixcraft.com/t/another-duplicity-instance-is-already-running-with-this-archive-directory-how-to-fix-it/4074


2022年2月8日火曜日

Ubuntu20.04でtracker が邪魔

ファイルの検索のためにtrackerを入れたのですがあまり効果が感じられず、CPUが1,2個100%まで上がることが頻繁に起こります。

https://askubuntu.com/questions/1258757/tracker-miner-fs-is-taking-90-of-cpu

にある

tracker reset --hard ; tracker daemon --start

を使ってその場でリスタートしていたのですが、あまり意味なし。


最終的に

https://www.linuxquestions.org/questions/ubuntu-63/how-to-disable-tracker-globally-in-ubuntu-20-04-a-4175678847/

にあるコマンドを参考に

systemctl --user mask tracker-{miner-apps,miner-fs,store,miner-f.service,miner-f}

で停めることにしました。


http://equj65.net/tech/systemd-manage/


時間がたつと復活している気がする。これならOK?

systemctl status tracker-{miner-apps,miner-fs,store,miner-f.service,miner-f}

Unit tracker-miner-apps.service could not be found.

Unit tracker-miner-fs.service could not be found.

Unit tracker-store.service could not be found.

Unit tracker-miner-f.service could not be found.

Unit tracker-miner-f.service could not be found.


以下は残骸

---

cron_tracker.sh をいうshell scriptを作って、毎分cronして 記録していました

#!/bin/bash


ps aux | grep '[t]racker' | awk -v time="$(date +"%F %H:%M:%S")""    " '{print time, $0}' >>cron_tracker.log

 

こんな感じで出力されます。

2022-02-05 08:01:01     user       7644  1.7  1.5 1516128 123536 ?      SNsl 07:37   0:24 /usr/libexec/tracker-extract

2022-02-05 08:01:01     user       7645 43.2  2.2 707804 180848 ?       RNsl 07:37  10:02 /usr/libexec/tracker-miner-fs

2022-02-05 08:01:01     user       7897  1.1  0.2 359596 19852 ?        Dsl  07:38   0:15 /usr/libexec/tracker-store

2022-02-05 08:02:01     user       7644  1.6  1.5 1516128 123220 ?      SNsl 07:37   0:24 /usr/libexec/tracker-extract

2022-02-05 08:02:01     user       7645 45.0  2.2 709916 183712 ?       RNsl 07:37  10:54 /usr/libexec/tracker-miner-fs

2022-02-05 08:02:01     user       7897  1.1  0.2 359596 19832 ?        Dsl  07:38   0:16 /usr/libexec/tracker-store

2022-02-05 08:03:01     user       7644  1.6  1.5 1516128 122324 ?      SNsl 07:37   0:24 /usr/libexec/tracker-extract

2022-02-05 08:03:01     user       7645 46.5  2.3 711900 185760 ?       RNsl 07:37  11:43 /usr/libexec/tracker-miner-fs

2022-02-05 08:03:01     user       7897  1.4  0.2 359596 19848 ?        Dsl  07:38   0:21 /usr/libexec/tracker-store

2022-02-05 08:04:01     user       7644  1.5  1.5 1516128 121704 ?      SNsl 07:37   0:24 /usr/libexec/tracker-extract

2022-02-05 08:04:01     user       7645 48.3  2.3 714276 188608 ?       RNsl 07:37  12:41 /usr/libexec/tracker-miner-fs

2022-02-05 08:04:01     user       7897  3.6  0.2 359596 19632 ?        Rsl  07:38   0:57 /usr/libexec/tracker-store

2022-02-05 08:05:01     user       7644  1.5  1.3 1501232 112364 ?      RNsl 07:37   0:24 /usr/libexec/tracker-extract

2022-02-05 08:05:01     user       7645 50.2  2.3 716284 190536 ?       RNsl 07:37  13:40 /usr/libexec/tracker-miner-fs

2022-02-05 08:05:01     user      12871 89.5  0.7 418108 62296 ?        Rsl  08:04   0:46 /usr/libexec/tracker-store

2021年10月31日日曜日

ubuntuで調べたことのメモ

sudoでaliasが使えないとき

.bashrc に alias sudo='sudo ' を登録する。sudo<スペース>としていて、他の記号でも良いらしい。

aliasかどうかはコマンドの最初しか見ないので、普通にsudo XXX とするとスキップされる。一方最初に記号(‘/’, ‘$’, ‘`’, ‘=’ など)が入っていると、2つ目の単語を見る。

ということだそうです。

https://askubuntu.com/questions/22037/aliases-not-available-when-using-sudo


2021年8月7日土曜日

ubuntu nautilus の starが使える/使えないディレクトリがある

nautilusのstar機能が使えないディレクトリがあり、理由を調べました。(ubuntu 20.04)

XDG user directoriesのディレクトリしか使えないらしい


https://gitlab.gnome.org/GNOME/nautilus/-/issues/243

使えるのは、下記のディレクトリの下にあるもの。Homeそのものは対象外です。

XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_VIDEOS_DIR="$HOME/Videos"


パスを変更することはできるらしい

https://wiki.archlinux.org/title/XDG_user_directories
https://forums.ubuntulinux.jp/viewtopic.php?pid=121174

これを変更するとnautilusのstarが使えるようになるのかは、不明です。

結局

home/user/ にあるディレクトリをstarしたかったのですが、面倒なので、starを使いたいディレクトリは、starが使える ディレクトリの下に置くことにしました。







2021年7月31日土曜日

scriptでUnix ターミナルの表示全てを保存する

script コマンドで、terminalの表示を逐一保存することができます。
$ script outputfile.txt

で出力ファイルを決めてスタート。
$ exit

するまで続きます。


出力を見てみると、PS1で設定したフォントの部分がそのまま出て文字化けか?と思ってしまいました。

この出力はターミナルのフォントの部分で、同じターミナルで読むときは問題ないですが、他のエディタなどで読むには辛いので消したいです。置換、削除するとスッキリします。

置換する
月 -> 月

削除する
\[01;3\dm
\[0m
\[00m
\]0;
~

---

Script started on 2021-07-31 14:54:50+09:00 [TERM="screen-256color" TTY="/dev/pts/3" COLUMNS="151" LINES="51"]
<user>@<client>:~$ script --help

Usage:
 script [options] [file]

Make a typescript of a terminal session.

Options:
 -a, --append                  append the output
 -c, --command        run command rather than interactive shell
 -e, --return                  return exit code of the child process
 -f, --flush                   run flush after each write
     --force                   use output file even when it is a link
 -o, --output-limit      terminate if output files exceed size
 -q, --quiet                   be quiet
 -t[], --timing[=] output timing data to stderr or to FILE
 -h, --help                    display this help
 -V, --version                 display version

For more details see script(1).
<user>@<client>:~$ exit
exit

Script done on 2021-07-31 14:54:59+09:00 [COMMAND_EXIT_CODE="0"]

実際のターミナルのスクリーショットはこんな感じでした。分かり難いですが元の色が設定されています。
参考 https://unix.stackexchange.com/questions/200637/save-all-the-terminal-output-to-a-file

2021年6月20日日曜日

Ubuntuで Capslockを全角半角キーとして使う

試した環境 Ubuntu20.04

キーボード配置 英語

fcitx, mozc

やりたいこと

  • 「CapsLock」を「全角半角」に(本来英語キーボードにはない)
  • 英数のときは小文字であること
  • 日本語のときも小文字であること(F10押すと小文字になること)
  • CapsLockは使えない状態にする

X11のファイルを設定する

 /usr/share/X11/xkb/symbols/capslock を見ると、どういう書き方になるかを確認できます。

/usr/share/X11/xkb/rules/evdev の中にコマンド群があって、caps: ...  という項目が並んでいるので

caps:mycaps   =   +mysetting(mycaps)

を適当な場所に追加します。(caps:mycaps という設定をmysettingファイルのmycaps   から読む、という意味)

次に、設定ファイルを作ります。/usr/share/X11/xkb/symbols/mysetting に以下を書き込んで保存します。(mycapsを呼び出すと、CAPSをZenkaku_Hankakuにする、という意味)

hidden partial modifier_keys

xkb_symbols "mycaps" {

    key <CAPS> { [ Zenkaku_Hankaku ] };

};

ここまで設定して、

$ setxkbmap -option caps:mycaps

とすると、CapsLockがZenkaku_Hankakuに変更できます。

設定ショートカットを作る

頻繁に設定がリセットされてしまうので、ショートカットを設定します。リセット自体は防げないようです。

mozc_reset.sh という名前(任意)でファイルを作ります。

このシェルスクリプトでは、fcitxを上書きしてからsetxkbmapを実行しています。

#!/bin/bash

# if Caps Lock is on, turn off
check=$(xset q | grep -q 'Caps Lock:   off'; echo $?)
if [ $check -eq 1 ] ; then
xdotool key Caps_Lock
fi

# reset fcitx-mozc
fcitx -r 1>/dev/null 2>&1
sleep 1s

setxkbmap -option caps:mycaps

パーミッションを変えておきます。

$ chmod 755 mozc_reset.sh

実行確認します。

$ bash mozc_reset.sh

ショートカットとして追加

Setting->Keyboard Shortcuts  + を押して追加ウィンドウ

Name: (任意)

command: bash mozc_reset.sh

Shortcut:  (任意) 

とりあえず使えています。たまに2回ショートカットを動作させないと正しく動かないときがありますが・・・。

参考

https://askubuntu.com/questions/968806/remap-caps-lock-to-ctrl-b

2021年6月19日土曜日

Ubuntu20.04,22.04でフォントのインストール

 VSCodeで使いたかったので'Ricty Diminished'をUbuntu20.04にインストールしました。


フォントはここからダウンロードする。https://github.com/edihbrandon/RictyDiminished

Zipファイルを解凍する。


font-managerをダウンロード

$ sudo apt install font-manager

$ font-manager


UbuntuのFontManagerで、 「+」(追加)でttfファイルを全て選ぶ。一覧に現れたら成功。Ricty Diminished Dicordとの違いはヒゲが追加されているかとかのようです。



VSCodeで使うときは、VSCodeを一度再起動するとフォント設定が反応するようになりました。



2021年4月30日金曜日

Ubuntu20.04 キーボード英語配列に変更する

環境: ubuntu20.04,  mozc, Fictx

(言語表示は英語)

いろいろハマったのでメモ。Configure Current Input Methodの方が効くようです。

Region & Language

Region & Language でInput SourceをEnglish(US)に。

(再起動必要?Mozcの設定に上書きされている模様で、変更が効かない)

Configure Current Input Method

メニューバーにあるキーボードまたはMOZCアイコンを右クリック、Configure Current Input Methodを出す。Fictx Congif Toolが起動する。

Input MethodでMozc -> キーボードアイコン-> Default keyboard layout :JapanaseからEnglish(US)に変更。English(US)は選択肢の一番上にあります。

半角全角切替はCrtl+Spaceでやる。

表記はJapaneseのままになっている。

(再起動なし)



2021年4月17日土曜日

DMMブックスのアプリをUbuntuで起動できなかった話

DMMブックスが70%割引のとき、いろいろ買ったのですが、ブラウザだと毎回のダウンロードが面倒なので、アプリを使えないかと試しましたができませんでした。

Ubuntu 20.04

DMMアプリ6.3.0

Wine 6.0.1

結論

Ubuntu20.04+Wineの設定でDMMbookviewerは起動できませんでした。

(自分の環境だけかもしれないですが。ただし、同じ環境でKindleとKoboはWineとexeファイルで使えています)

やったこと

32bit版のファイルをインストールして、できているようなのですが、いざプログラムを起動すると「DRM機能を初期化中・・・」という表示が出てそこから進みません。




こういうときはWindowsを再起動するとよい、という別の話題があって、winebootで再起動してみたりしましたが、効果ありません。

ちなみにWineのディレクトリでexeファイルは下記にあります。(ショートカットも作成されていますが)

~/.wine/drive_c/Program Files/DMM/DMMbookviewer/DMMbookviewer.exe


エラーの番号で検索すると、DMMのQAが出てきます。

https://help.dmm.com/-/detail/=/qid=46863/

■ライセンスの確認でエラーが発生しました。(E_AP_000999) / (E_CW_000999)

下記ツールをダウンロードいただき、ライセンスの修復を行ってください。


■ライセンス修復ツール


修復ツールをダウンロードされた後に、ファイルの解凍を行ってください。

 

DMMブックスを起動している場合は、ビューアを終了させてください。

dmmbooklicrst.exeを実行します。

ライセンス修復ツールの画面で「サービス全体のライセンス情報を削除します。」が選ばれている状態で「続行」ボタンをクリックします。

修復完了のメッセージが表示されましたら「OK」ボタンで閉じます。

DMMブックスで書籍ファイルを開き、認証処理を行ってください。


・・・dmmbooklicrst.exeは実行できませんでした。ライセンスの書いてあるファイルがどれか分かればいいのだろうか、と思って探したけれど分かりませんでした。

こちらに情報がありますが、Windows機のようなので駄目そうです。

License Information ACL Repair Toolなるものをダウンロードして、 LicInfoAclTool.exe を管理者として実行。そして再起動。


結果、直った…

https://arimasou16.com/blog/2018/04/14/00251/


とりあえず

ブラウザで見ます。

2020年10月5日月曜日

Ubuntu20.04 で再起動フリーズ。blk_update_request: I/O error

追記2021/10/22

初めて再起動が何も問題なくできました。アップデートで解決したのかもしれません。

ーーー

Ubuntu20.04 で、再起動すると起動しなくなってフリーズしてしまいます。起動しようとしてそうだけど、ずっと止まっていることもあります。

とりあえず回避方法

・再起動はNGで、シャットダウン→起動の方が成功しやすい 

・さらに失敗(フリーズ)したら、電源長押しでシャットダウン→起動する を繰り返す


---

出ていたエラーメッセージ


blk_update_request: I/O error, dev sbd, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0

Buffer I/O error on dev sbd, logical block 0, async page read 


フリーズから強制終了して起動したら(とりあえず)復旧

電源長押しでシャットダウンしてから起動して、無事復旧しました。



考えられる原因?

(blueman のエラーが出ていましたが、コピペメモし忘れた。20.04ではこの部分にエラーが出ているらしい)

直前にUpdateをする/しないは関係なくフリーズしていました

SSD、HDDをUSBに挿しっぱなしだったこと→関係なさそう

HDDディスクの劣化(3年半くらいたっている)→??


-- 調べた--

メディアのブロックが書き込めないエラーで、

ディスク破損・接続問題・ブロックが涸渇して小さい領域が使われてしまった?などが理由

https://serverfault.com/questions/866109/centos7-buffer-i-o-error-on-dev-sda-logical-block-xxxxxxxxx-lost-async-page


別の古いPCでは再起動の問題が起きない

古いノートPC(レッツノートR8)にもUbuntu20.04を入れているのですが、再起動に関しては問題ありません。このノートには、Bluetooth、Wi-Fiが付いていません。ハードウェア的な問題なんでしょうか。

2020年8月25日火曜日

Ubuntu初期設定自分用やることリスト★

PCクリーンインストールのためのメモを作りたい

項目だけ決めておけばあとは調べながらできる
  • locate 
  • gnome-tweaks
  • easy stroke [setting]
  • VSCode [setting]
  • Google Chrome
  • mozc [setting, my辞書]
  • wine [ページあり, kindle, kobo]
  • キーバインドの設定 [ページあり]
  • tmux [.tmuxconf]
  • GIMP
  • Python, jupyter, geckodriver, anaconda?


適宜
  • filezilla
  • arduino IDE
  • LibreOffice日本語化する

2019年12月17日火曜日

Ubuntuでファイルをrenameする

image1.jpeg, image2.jpeg ...というファイルがあるとして、imageの部分をphotoにしたいとします。

ubuntuの場合はこう書きます。

$ rename "s/image/photo/;" *.jpeg
vimのようなsubstitubeですね。

普通に検索したら他のlinuxでのやり方が出てきて、エラーが出ます。

$ rename image photo image*.jpeg
これはUbuntuではエラー
Bareword "image" not allowed while "strict subs" in use at (user-supplied code).

2019年11月23日土曜日

Linuxターミナルでignorecaseにする

terminalで大文字小文字を無視(ignorecase)にしたいときは、
このコマンドをターミナルで実行します。
# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc
https://askubuntu.com/questions/87061/can-i-make-tab-auto-completion-case-insensitive-in-bash
ターミナルを再起動すれば適用されています。

2019年7月14日日曜日

CRONでPythonを定期実行

LinuxのcronコマンドでPythonを定期実行させます。自己流なのであしからずご了承ください。


よく使っているやり方


8:45に定期実行する例

45 8 * * * (cd /path/to/file/ && python file.py >> cronlog.log 2>&1) 

  • python file.pyを実行しますが、先にcdでfile.pyのあるディレクトリに移動します。コマンドは&&で繋ぎます。これで.py内でのカレントディレクトリを気にしなくてよくなります。
  • >> cronlog.log 2>&1で同じディレクトリにあるcron.log.logにstd.out, std.errともログを書き足していきます。(微妙なので下記のPythonのlogging参照)
  • cronではローカルと環境変数が異なるので、ローカルの環境変数を使いたいときは.  * * * * *  (~/.profile && command) というようにprofile読み込みコマンドを前に入れます。

ログはPython側で

ログはPython側で設定しています。std.errだとタイムスタンプが入らないなど使いにくかったので(入れる方法は後述)。
testlog.pyというファイルに下記を保存して実行すると、testlog.py.logというログファイルが生成されます。exceptは端折ってますが本当は指定しないといけません。Pythonのロギングについては、こちらで詳しく書いています( python loggingメモ - shimo lab2 )
import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler("log/" + __file__ + ".log")
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter(
    "%(asctime)s, %(levelname)s, %(message)s", "%Y-%m-%d %H:%M:%S"
)
fh.setFormatter(formatter)
logger.addHandler(fh)

def main():
    1 / 0

if __name__ == "__main__":
    try:
        main()
    except:
        logger.exception("-" * 10)
ログファイルtestlog.py.logの中身
2021-02-19 18:09:01, ERROR, ----------
Traceback (most recent call last):
  File "testlog.py", line 29, in 
    main()
  File "testlog.py", line 23, in main
    1 / 0
ZeroDivisionError: division by zero

cronについて

  • 再起動しても自動でCRON処理を実行してくれる(スタートアップでcrond起動)
  • 実行ファイルとcronは別なので独立しているので、タイマー設定後にファイルを更新してもよい
  • 複数の処理を1つのファイル(crontab)で管理できる
  • 枯れた技術で安心

crontabで実行するスクリプトの準備

まず定期実行するpyスクリプトを用意します。
crontab_test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
now = datetime.datetime.now()
text = now.strftime("%Y/%m/%d %H:%M:%S\n")
with open('file.txt', 'a') as f:
    f.write(text)
今回例として使うのは、時刻をテキストファイルに書き込むスクリプトです。

crontabを実行する

$ crontab -e
実行の時間やコマンドを記述するための、エディットモードが現れます。

※初めての実行では、エディタを何にするか聞いてきます(select-editorコマンドと同じ)。4のvim.gtkを使いました。5のvim.tinyではプラグインのエラーが出ていました。
$ select-editor
Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.gtk
  5. /usr/bin/vim.tiny

注意

$ crontab -r

crontabの内容が消えるので注意です(Remove)。自分はcrontab -eを辞書登録して呼び出していて、直接コマンドを打たないようにしています。

crontab -eの編集

定期実行する日時とコマンドを1行で書きます。毎時45分にpython crontab_test.pyを実行するCRONの書き方は・・・

45 * * * * python /path/to/crontab_test.py

ファイル名はフルパスで書いたほうがよいと言われています(/home/user/ から呼ばれています)

日時の書き方は順に
m h  dom mon dow command
分時 日月 曜日
※dow曜日0, 7が日曜, 1が月曜,...)
※アスタリスク* は「全ての」という意味

CRONのログを確認する

動作したか確認したいとき、システムログ /var/log/syslogを確認します。

$ less /var/log/syslog | grep CRON

上記で毎時45分に設定したpythonの結果はこのように出ます。
Jul 14 17:45:01 XXXX CRON[23197]: (user) CMD (python /path/to/crontab_test.py)

std.out std.errorをテキスト出力

stdoutのprint文はコンソールに出力されません。また、Pythonスクリプトが失敗してもエラーは表示されません。標準出力、標準エラーを、ファイルに書き込みます。

30 8 * * * /../../..py >>log.log 2>>err.log

log.logの前の>> は1>> とも書けます。
これで8:30に実行するpyスクリプトの標準出力と標準エラーがファイルに書き込まれます。


同じファイルに出力する


上記で >>log.log 2>>err.log を >>log.log 2>&1

と書き換えると、stderrも同じlog.logに書き込まれます。


stdout にcron実行時間を書き込む


ロギングのところで実行時間が入らないと書きましたが、無理やり入れることは可能です。実行前にこれを入れます。

echo $(date +\%Y-\%m-\%d\ \%H:\%M:\%S) >> cronlog.log && <実行したいコマンド>

単に date表記を書き込んでるだけです。%とスペースはバックスラッシュでエスケープしています。
簡単なものならこれでもいいかな、と思っています。

長いので、変数をcrontabの中に書いて

ECHO_DATE=$(echo $(date +\%Y-\%m-\%d\ \%H:\%M:\%S) >> cronlog.log)

evalを使って呼び出したりしています。

eval $ECHO_DATE 

実行ファイルの絶対パスを取得する

cronでは絶対パスでpyファイルを呼び出しますが、このpyファイルの存在するディレクトリ名を出したいとき、os.getcwd()だと失敗します※カレントディレクトリは/home/user/になる。

os.path.abspath(os.path.dirname(__file__))

で実行しているファイルの絶対パスが出せます。


CRONのバックアップ

こちらのブログが参考になります。crontab -lで設定の内容が表示できますが、それをバックアップファイルにリダイレクトして、それ自体をcronで定期的実行するといいみたいです。

CRONTABで環境変数設定

通常の環境では実行できるのに、CRONでは止まっているようです。エラーログを見てみると、

ImportError: No module named numpy

html = urllib.request.urlopen(url).read().decode('utf-8')

AttributeError: 'module' object has no attribute 'request'
numpyがない、rullibでrequestがないとのことです。

結論: CRONで環境変数を設定する必要がある。

crontabの設定ファイル内に

PATH=/home/...:/home/.../

などと、記入すると解決しました。

--

cronで使っているPythonが別の場所にある可能性があるとき。
which python を使ったりしてpythonのフルパスを調べたりもできます。

環境変数を入れずに、フルパスでpythonを呼び出してもOK。



CRON JOBで実行するたびに環境変数設定をprofileから読み込む

例えば環境変数が/.profileにあってそれをハードコードしたくない場合、都度読み込んでからファイルを実行すればよいです。
0 * * * * (. ~/.profile && cd /path/to/file/ && python file.py >> cronlog.log 2>> cronerr.log)
これで毎時間0分に、/.profileを読み込んでからディレクトリ移動してpython実行となります。

2019年6月15日土曜日

HEICファイルをjpgに (linux)

unbuntu16.04LTSでHEICファイルをJPEGにします。

・GIMP
・heif-convert

どちらの方法でもできました。

iOS11 以降で画像ファイルがHEICで圧縮されているとのこと。これをHTMLに表示するには、JPGにしたいです。

■GIMPを使う

GIMPがインストールされているなら簡単です。GIMPでHEICファイルも普通に読み込めますから、エクスポート保存するときにJPGにできます。


■heif-convertを使う

https://kameid.hatenadiary.org/entry/20181002/1538461121

このページで紹介されていた方法でやってみました。ライブラリのインストールに時間かかりまくりでビビります。コードはリンク先で。

--最初失敗していたとき--

heif-convertは入っているようですが、

Unknown file type in hoge.jpg

という出力が出ていて、jpgファイルタイプが認識されていないようです。

インストールのときのログを見ていると、

checking jpeglib.h usability... no
checking jpeglib.h presence... no
checking for jpeglib.h... no
checking for jpeg_CreateCompress in -ljpeg... no
checking for jpeg_destroy_compress in -ljpeg... no
checking for libpng... no
configure: Enable multithreading
configure: ---------------------------------------
configure: Multithreading: yes
configure: Symbol visibility: yes
configure: libde265 decoder: yes
configure: libx265 encoder: no
configure: JPEG output: no
configure: PNG output: no

こう出ていました。
やはり、jpegもpngもc++のライブラリか何かが足りていないようですが・・・。

yum がそもそもUbuntuでは使えていない!!という気付き。

ログをよく見ると
$ yum install git gcc-c++ automake libtool libjpeg-devel
The program 'yum' is currently not installed. You can install it by typing:
sudo apt install yum
ってなっていました。そういえばyumって使えないんでしたっけ。理由は判明。あまりにも初歩的だった・・・。

教訓: 複数行を同時に実行するときはログをきちんと見ましょう。OSに合ったコマンドを入れましょう。

RedHat系(Fedora, CentOSとか)ではyum、Debian系(Ubuntuとか)ではaptです。普段からubuntuの例しか見ていなかったので意識していませんでした。yumって何?とか思いながらコピペしてしまいました。

まずJPEG用のライブラリを2つインストールします。名前がCent系とちょこっと変わるみたいです。

$ sudo apt-get install libtool-bin
$ sudo apt-get install libjpeg-dev

これを入れてから、再度ライブラリのインストールをします。

途中のログはこのようになって、jpegのライブラリがyesになっています。

checking jpeglib.h usability... yes
checking jpeglib.h presence... yes
checking for jpeglib.h... yes
checking for jpeg_CreateCompress in -ljpeg... yes
checking for libpng... no
configure: Enable multithreading
configure: ---------------------------------------
configure: Multithreading: yes
configure: Symbol visibility: yes
configure: libde265 decoder: yes
configure: libx265 encoder: no
configure: JPEG output: yes
configure: PNG output: no

これでheif-convertも使えるようになりました。

heif-convert使い方

例としてhoge.jpgというファイルを出力します。

$ heif-convert IMG_3046.HEIC hoge.jpg
とすると、このような出力が出ます。

File contains 1 images
Written to hoge.jpg

この例では、元のHEICファイルは1.2MBでしたが、JPGに戻すと1.7MBになりました。確かにHEIC圧縮率が高いということが分かります。

参考にしたページ
http://atasatamatara.hatenablog.jp/entry/20120723/1343044059
http://kz-engineer-scrap.hatenablog.com/entry/2017/02/12/003718
https://forums.ubuntulinux.jp/viewtopic.php?id=8530
https://askubuntu.com/questions/625523/libtool-installed-but-not-on-path-after-installation

2019年5月27日月曜日

Ubuntuのアプリケーション切り替えAlt+Tabが2つ入っていた件

何故2つ入っているのか不明なのですが、Conpiz comfig setting → Application Switcherというのをオフにしたら1つに出来ました。こちらの方がよい感じですね。

Ubuntuの起動時にコマンドを実行したいとき

Startup Applications Preferenceで設定する


コマンドを直接記入すると動作しなかったので、.shファイルに記述して呼び出すことにしました。

起動時に実行したいコマンドは『CapslockボタンにEscapeを割り当てる』
$ xmodmap -e "keycode 66 = Escape NoSymbol Escape"
これをmy_command.shに記入します。
#!/bin/sh
# swap Capslock to Escape
xmodmap -e "keycode 66 = Escape NoSymbol Escape"
Startup Applications Preferenceで設定します。「session」とか「startup」で検索すると出てきます。



[Add] -> [Edit Startup Program] で

Name: Capslock2ESC
Command: /home/path/to/my_command.sh
Commend: Change Capslock to ESC

と入力します。Commandの項で.shコマンドのPATHを書いてください。



[Save]で追加します。


追加が確認できました。
Removeも、この画面から行います。


(失敗した方法)


/etc/profile.d/」以下に実行したいスクリプトファイル(*.sh)を配置
もやってみましたが、出来ませんでした。むしろ起動が止まってしまってCtrl-Alt-F2に仮想コンソールに入って、shを書き換えて再起動したりしました。
http://yng.hatenablog.jp/entry/2015/05/26/234737