pebbleでHelloWorld
pebbleのwatchfaceを作ります。
まずはアナログ時計を作って見たいと思いましたが、今回はHelloWorldまでにしときます。
CloudPebbleにログイン
pebbleにはwatchfaceやwatchappを簡単に作るためのクラウド環境が用意されています。*1今回はそれで作ってみます。
pebbleのアカウントでログインできると思います。
HelloWorld
ログインできたら、CREATEを選択してプロジェクトを作成します。
PROJECT NAMEは適当にここでは SAMPLE01としました。
あとTEMPLATEはHelloWorldを選択しましょう。
これでプロジェクトが作成できました。
左側のCOMPILATIONを選択して、RUN BUILDされるとプロジェクトがbuildされます。それから下記のハードウェアを選択します。
- APLITE : pebble classic
- BASALT : pebble time
- CHALK : pebble time round
- DIORITE : pebble 2
- EMERY : pebble time 2
これであなたもpebbleプログラマです。
pebbleのwatchfaceを作りました
このタイミングでこんな記事を書くのもどうかと思いましたが、せっかくやったことなので書こうと思います。*1
去年(2016)のゴールデンウィークあたりにpebble time roundを購入して、watchfaceを3つ作りました。
この3つです。まだSDK4に対応していません。
pebble storeにて公開中。
https://apps.getpebble.com/applications/5773e5516c2104f4b3000411
https://apps.getpebble.com/applications/573879bc07033fc7cb000010
https://apps.getpebble.com/applications/572eb542bc4006126100000e
ソースコードはgithubにて公開中。
github.com
github.com
github.com
これらのwatchfaceの作成からpebble storeへの公開までを書きたいと思います。
大体こんな内容で書く予定です。ちょっと変わるかも。
Macのログイン画面でトラックパッドをカチカチしたくない
Mac(Mountain Lion)のログイン画面ではトラックパッドのタップが使えません。カチカチしないといけません。全然スマートじゃないので、ログイン画面でもタップできるようにします。
ターミナルで下記コマンドを入力します。再起動しないといけなかったような気がします。
$ sudo cp /Users/ユーザ名/Library/Preferences/com.apple.driver.AppleBluetoothMultitouch.trackpad.plist /var/root/Library/Preferences/ $ sudo chown root:wheel /var/root/Library/Preferences/com.apple.driver.AppleBluetoothMultitouch.trackpad.plist
rsyncでバックアップ
rsyncを使うと簡単に差分バックアップを取ることができます。コンピュータが2台必要ですが。
私はこんな感じでバックアップを取っています。
rsync -atuv --exclude=".*" /Users/クライアントのユーザ名/backup/ user@hostname:/Users/サーバのユーザ名/backup
これでクライアントのコンピュータ上のbackupディレクトリ配下のファイルをサーバのbackupフォルダに転送できます。
オプションについて
-aオプションをつけているので、-tオプションはいらないはずですが、-aだけだとタイムスタンプがコピーされていなかった気がします。
--exclude=".*"で隠しファイルを除外しています。
-nオプションを付けるとテストできるので、初めて実行する際は試した方が良いかと思います。
外出先からssh接続する
外出先からsshサーバに接続したいですよね。
そのためにはグローバルIPアドレスを取得して、ルータの設定もしないといけません。
グローバルIPアドレスを知る
外からではMacの設定画面で見えていたIPアドレスを使ってアクセスはできません。このIPアドレスはローカルIPアドレスといって、家の中でしか使えないIPアドレスです。
まずはグローバルIPアドレスを知る必要があります。下記サイトで簡単に調べられます。
https://www.cman.jp/network/support/go_access.cgi
もしかしたら、グローバルIPアドレスが割り振られていないかもしれません。そのときはプロバイダにお問い合わせください。
ルータを設定する
グローバルIPアドレスがわかりましたが、これだけではまだ外からアクセスはできません。これはsshでグローバルIPアドレスを指定しても、ルータにぶら下がっているどのコンピュータに接続を回せばよいかわからないためです。
そこでルータのポートマッピング設定を下記のように行います。
IPアドレス:sshサーバのローカルIPアドレス
プロトコル:TCP
ポート:22(もし変更していれば変更した番号)
これでssh接続の際にグローバルIPアドレスを指定すれば、とりあえずは外からのアクセスが可能となります。*1
ドメインを取得して、グローバルIPアドレスと結びつける
おそらくほとんどの方はグローバルIPアドレスが任意のタイミングで変化します。*2これでは困ってしまうので、ドメイン*3を取得して、ドメインで接続できるようにします。
まずはドメインを取得しましょう。
wget -q -O - 'http://free.ddo.jp/dnsupdate.php?dn=ドメイン名&pw=パスワード' | iconv -f euc-jp -t utf-8 >> /root/log/ddns.log"
このコマンドでグローバルIPアドレスとドメインを結びつけられます。また結びつける際に/root/log/ddns.logにログを吐き出すようにしています。
ただしこのコマンドを一度実行するだけではグローバルIPアドレスの変化に対応できません。そこでこのコマンドを定期的に実行して、グローバルIPアドレスの変化に備えます。
$ echo "wget -q -O - 'http://free.ddo.jp/dnsupdate.php?dn=imoto-yuya-1234&pw=Watashi2' | iconv -f euc-jp -t utf-8 >> /root/log/ddns.log" >> /root/bin/ddns.sh $ chmod 700 /root/bin/ddns.sh $ crontab -e 25 * * * * sh /root/bin/ddns.sh $ systemctl enable cronie (ArchLinuxに必要かも) $ systemctl start cronie (ArchLinuxに必要かも)
ここでcronというスクリプトを自動実行するデーモンプロセスを使いました。この設定でddns.shスクリプトは毎時間の25分に自動実行されます。
sshサーバを構築する
二回目のブログ更新です。今回は以前構築したsshサーバの手順を書きたいと思います。macOSでの構築手順についてメモを残していたのでそれをコピペします。Mountain Lionのときのものです。少し古い情報ですが、現在のSierraでも同じだと思います。また基本的な流れはLinuxサーバでも変わりません。Linuxだとコマンド操作が必要です。*1
sshサーバを立てる
「システム環境設定」の「共有」を選択します。スクリーンショットの①のように「リモートログイン」を「入」にします。これでMacがsshサーバーとして立ち上がります。スクリーンショットの②は白抜きになっていますが、実際はuser@hostname(ここでのhostnameはIPアドレス)となっています。
ここで同一のLAN上にあるコンピュータのターミナルから
$ ssh user@hostname
と打ち込むとパスワードを要求されます。sshサーバを立てたMacのパスワードを入力するとsshでログインできます。hostnameの部分はスクリーンショットの③の白抜き(hoge.local)でも良いです。
アクセスできるユーザを限定する
アクセス可能なユーザを限定します。 スクリーンショットの④のように「アクセスを許可」の「次のユーザのみ」を選択します。 そのあと「+」を選択して、 sshでアクセスしたいユーザを選択します。
公開鍵認証にしてみる
sshクライアント側(sshサーバにアクセスする側)のターミナルで
$ cd ~/.ssh $ ssh-keygen -t rsa(全てEneterでOK) $ scp id_rsa.pub username@hostname:/Users/username/.ssh $ ssh user@hostname $ cd ~/.ssh $ cat id_rsa.pub >> authorized_keys $ chmod 600 authorized_keys
これで公開鍵認証が出来るようになりました。sshクライアント側のターミナルから
$ ssh user@hostname
パスワードを要求されずに ssh接続が出来るようになったかと思います。
sshの設定を変更する
/etc/sshd_configの編集によって行います。
$ vi /etc/sshd_config Protocol 2 PermitRootLogin no RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys ChallengeResponseAuthentication no UsePAM no Port 22(Linuxとかはここで任意のポート番号を設定できます)
私はこんな感じで設定したみたいです。
ポートを変更してみる(Mac)
Macの場合はsshd_configの編集でポートを変更できません*2。ポート変更は/System/Library/LaunchDaemons/ssh.plistの編集によって行います。
$ vi /System/Library/LaunchDaemon/ssh.plist <key>Listeners</key> <dict> <key>SockServiceName</key> <string>ssh</string>(sshを23にするとポート23に変更されます) <key>Bonjour</key>
ポートを変更した時は
-pオプションをつけて、ポート番号を指定しましょう。
$ ssh user@hostname -p 22(変更したポート番号)
IPアドレスを固定する
デフォルトの設定だと、コンピュータが再起動するとIPアドレスが変わってしまいます。サーバにするなら、固定にした方が良いです。
Macだと「システム環境設定」の「ネットワーク」から設定できます。
「ネットワーク」設定の左側から接続済みのネットワークを選択して、右下にある「詳細」を選択します。
するとこんな画面が出てきます。
ここから⑤の「TCP/IP」タブを選択して、⑥の「IPv4の設定」でプルダウンの中から「手入力」を選択します。それから⑦の「IPv4アドレス」に任意のアドレスを入力します。といってもなんでも良いわけではなくて、今回だとルータのIPアドレスが192.168.0.1になっているので、192.168.0.10とか192.168.0.20とか、192.168.0.xxのようなIPアドレスでなければなりません。
これでIPアドレスを固定することができました。
しかし、この設定をするとネットワーク接続できない場合があった気がします。そのときは「DNS」タブを選択して、DNSサーバにルータのアドレス、ここでは192.168.0.1を追加してみてください。
再起動
設定が終わったら再起動しておきましょう。スクリーンショットの①を「切」にして、再び「入」にすると再起動です。