履歴
20/10/03 本線のコミットログのリンク修正
20/02/16 v1.4.3 日本語化を新規作成
最新版
もっと簡単な設定で日本語になります。
対応方法を書きました。
https://qiita.com/k0uj1k/items/f91a3b7e3a4b9209774f
v 1.4.3 の場合の日本語表示
https://github.com/evilsocket/pwnagotchi/releases/tag/v1.4.3
こちらから作成すると、英語版(lang: en)が標準になります。
bt-tethering
を有効にして、`auto.update = enable' だと、自動で v 1.5.2 になります。
/etc/pwnagotch/config.toml
ができています。config.yml
の内容が引き継がれますが、
日本語設定のために追加が必要です。
[main]
lang = "jp"
[ui.font]
name = "fonts-japanese-gothic"
size_offset = 0
ここから v 1.4.3の対応方法
pwnagotchi は "/etc/pwnagotchi/config.yml" で lang: en を lang: jp に変更すると、
main:
name: 'pwnagotchi(your name)'
# currently implemented: en (default), de, el, fr, it, mk, nl, ru, se, pt-BR, es, pt
lang: jp
...
表示フォント"DejaVuSansMono" が日本語対応していないので、□(別名豆腐)表記になります。(日本語が出ません)
pwnagotchi/locale/jp/LC_MESSAGES/voice.po には、日本語のセリフファイルがあるのですが、とても残念だったので、探ってみました。
$ ssh pi@10.0.0.2
$ sudo su
# cd /usr/local/lib/python3.7/dist-packages/pwnagotchi
フォント指定(うまくいかなかった)
フォントは、font.py の PATH
で指定されています。
from PIL import ImageFont
PATH = '/usr/share/fonts/truetype/dejavu/DejaVuSansMono'
Bold = ImageFont.truetype("%s-Bold.ttf" % PATH, 10)
BoldSmall = ImageFont.truetype("%s-Bold.ttf" % PATH, 8)
BoldBig = ImageFont.truetype("%s-Bold.ttf" % PATH, 25)
Medium = ImageFont.truetype("%s.ttf" % PATH, 10)
Small = ImageFont.truetype("%s.ttf" % PATH, 9)
Huge = ImageFont.truetype("%s-Bold.ttf" % PATH, 25)
def setup(bold, bold_small, medium, huge):
global PATH, Bold, BoldSmall, Medium, Huge
Bold = ImageFont.truetype("%s-Bold.ttf" % PATH, bold)
BoldSmall = ImageFont.truetype("%s-Bold.ttf" % PATH, bold_small)
Medium = ImageFont.truetype("%s.ttf" % PATH, medium)
Huge = ImageFont.truetype("%s-Bold.ttf" % PATH, huge)
上記のように、PATHにDejaVuSansMono
を指定しています。
これを日本語対応の別のフォントにすれば良いのではと思いました。
でも、これを変えるとせっかくの 顔
の表示が壊れてしまいます。
⇒ "フォントの達人"ならば力業で何とかすると思うのですが...
私は別アプローチを取りました。
UIでの解決(暫定解決方法)
pwnagotchi/ui/view.py の status
がセリフの表示です。
...
self._state = State(state={
...
'status': Text(value=self._voice.default(),
position=self._layout['status']['pos'],
color=BLACK,
font=self._layout['status']['font'],
wrap=True,
# the current maximum number of characters per line, assuming each character is 6 pixels wide
max_length=self._layout['status']['max']),
...
ここのfont
だけを、日本語フォントに指定しました。(なので、暫定です。)
次のように、追加しました。
# diff -u view.py.org view.py
--- view.py.org 2019-12-23 19:41:34.000000000 +0900
+++ view.py 2020-02-10 21:12:56.760000000 +0900
@@ -16,11 +16,12 @@
from pwnagotchi.ui.components import *
from pwnagotchi.ui.state import State
+from PIL import ImageFont
+
WHITE = 0xff
BLACK = 0x00
ROOT = None
-
class View(object):
def __init__(self, config, impl, state=None):
global ROOT
@@ -28,6 +29,8 @@
# setup faces from the configuration in case the user customized them
faces.load_from_config(config['ui']['faces'])
+ font_msg = ImageFont.truetype('/usr/share/fonts/truetype/fonts-japanese-gothic.ttf', 11)
+
self._agent = None
self._render_cbs = []
self._config = config
@@ -65,7 +68,8 @@
'status': Text(value=self._voice.default(),
position=self._layout['status']['pos'],
color=BLACK,
- font=self._layout['status']['font'],
+ #font=self._layout['status']['font'],
+ font=font_msg,
wrap=True,
# the current maximum number of characters per line, assuming each character is 6 pixels wide
max_length=self._layout['status']['max']),
たぶん、このパッチは設計思想(フレームワーク構成)とは合わないと思いますが、
ここでフォントを変更します。
ImageFont
を設定するために、
from PIL import ImageFont
と
__init__
でfont_msg 変数を新設して日本語フォントとポイント数を直接指定しました。
日本語フォントは、raspbian (日本語パッケージ)に入っている japanese-gothic.ttf
を指定しました。
ポイント数は、10pt が DejaVuSansMono のdefaultっぽいのですが、
表示がイマイチだったので、11pt を選びました。
#12ptだと、表示できる文字数が少なくなって残念になります。
#ちなみに、小数点10.5ptとかは指定できません。エラーになります。
⇒ もっと見やすいフォントがあるとよいのですが...
font_msg = ImageFont.truetype('/usr/share/fonts/truetype/fonts-japanese-gothic.ttf', 11)
を追加しました。
さらに、status
の font
を変更します。
#font=self._layout['status']['font'],
のようにコメントアウトして、
font=font_msg,
上記で定義した font_msg
に置き換えます。
ui/hw/xxx.py (表示デバイス)との連携があるため、
よい方法がみつけられていません。</b>~~~
⇒ ありがとう。`twitter:@dadav` さん。
### pycache の更新
```
root@pwnagotchi(your name):/usr/local/lib/python3.7/dist-packages/pwnagotchi/ui # python3
Python 3.7.3 (default, Apr 3 2019, 05:39:12)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import py_compile
>>> py_compile.compile("view.py")
'__pycache__/view.cpython-37.pyc'
>>> quit()
root@pwnagotchi(your name):/usr/local/lib/python3.7/dist-packages/pwnagotchi/ui # systemctl pwnagotchi restart
```
/var/log/syslog を確認してください。
指定ミスがあると、エラーが表示されますのでチェックできます。
---
## セリフの更新
pwnagotchi のセリフは `/usr/local/src/pwnagotchi/pwnagotchi/locale/jp/LC_MESSAGES/voice.po`
にあります。
とても頑張っているんだけれど、もう少し楽しくしたかったので、変更してみました。
### ご自分で行う方法
/usr/local/src/pwnagotchi/pwnagotchi/locale/jp/LC_MESSAGES/voice.po
を編集
英語と日本語が1:1になっているので、`msgstr`に気に入ったセリフへ変更できます。
```voice.po
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR 24534649+wytshadow@users.noreply.github.com, 2019.
...
msgid "ZzzzZZzzzzZzzz"
msgstr "すやすや~"
msgid "Hi, I'm Pwnagotchi! Starting ..."
msgstr "僕、 ポーナゴッチです!"
msgid "New day, new hunt, new pwns!"
msgstr "ポーンしようよ。"
msgid "Hack the Planet!"
msgstr "ハックザプラネット!"
...
```
変更したら、コマンドラインで言語情報を更新します。
```
# cd /usr/local/src/pwnagotchi
# ./script/language.sh compile jp
# ./script/language.sh update jp
# cp pwnagotchi/locale/jp/LC_MESSAGES/voice.?o /usr/local/lib/python3.7/dist-packages/pwnagotchi/locale/jp/LC_MESSAGES
# systemctl pwnagotchi restart
```
voice.po と voice.mo をコピー (たぶん voice.mo だけでも良いと思いますが)
<b> 私が作ったものが、本線に登録されました。</b>
https://github.com/evilsocket/pwnagotchi/commit/54ffbbcb0b143d90e5f750d3b59b63adb0a223c8#diff-20b147eeb6cd7b3979fd22ea934ccedb
voice.po (テキストファイル)
voice.mo (script/language.sh compile 後のバイナリ)
```
$ scp voice.?o pi@10.0.0.2:/home/pi
# cp /home/pi/voice.?o /usr/local/lib/python3.7/dist-packages/pwnagotchi/locale/jp/LC_MESSAGES
# systemctl pwnagotchi restart
```
-----
## ハックザプラネット!