macOS SierraでKeychainに新規WiFiパスワードが登録されない問題の解決方法
本題の通り、Sierraにて新しいWiFIに繋げた時、そのパスワードがキーチェーンに登録されず、毎回パスワードを求められる現象が発生したときの対処法。
昔のバージョンでは Keychain First Aid
なるものがあったが、最近のバージョンには搭載されていない。
解決策
Keychainが壊れているようなので、Keychainフォルダを削除(移動)させて、全て初期化する。 (その前にiCloud連携を切っておいたほうが良いかもしれない)
mv ~/Library/Keychains ~/Library/Keychains.bak sudo mv /Library/Keychains /Library/Keychains.bak => 再起動
駄目だった方法
- macOSの上書きインストール
- 新規キーチェーンの作成とデフォルト設定
- キーチェーンのメニューから行う初期化
CentOS6でG3258のIntel HD Graphicsドライバが認識されない問題
録画環境を前回の記事の通りに作った。 次はTSファイルをエンコードする環境を構築する。 画質にそこまでこだわりはないので、QSVを使ってH264に圧縮する。 その過程でグラフィックドライバが認識されないという問題にぶち当たったので解決法を乗せる
環境
M/B: H97-PLUS CPU: Pentium Dual-Core G3258 BOX OS: CentOS release 6.9
*注 もちろんCPUがQSV対応でないとそもそも駄目である
ドライバ導入
yum install xorg-x11-drv-intel.x86_64 xorg-x11-drv-intel.x86_64-devel reboot
認識されない
lshwを使って確認してみたところドライバが認識されていない
(lshwはyumで導入した yum install lshw
)
% sudo lshw -c video *-display UNCLAIMED description: VGA compatible controller product: Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller vendor: Intel Corporation physical id: 2 bus info: pci@0000:00:02.0 version: 06 width: 64 bits clock: 33MHz capabilities: msi pm vga_controller bus_master cap_list configuration: latency=0 resources: memory:f7800000-f7bfffff memory:e0000000-efffffff(prefetchable) ioport:f000(size=64)
UNLCAIMEDになっている。ドライバが認識されていない場合上記の表示になるらしい。 この状態ではVAAPIが利用できない。
解決方法
grubで起動するときに渡されているオプション nomodeset
が悪さをしているらしい。
/boot/grub/menu.lst
を編集して nomodeset
を削除する。
vim /boot/grub/menu.lst
[before] kernel /vmlinuz-2.6.32-696.1.1.el6.x86_64 ro root=/dev/mapper/vg_hoge-lv_root nomodeset rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_hoge/lv_root rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=vg_hoge/lv_swap rd_NO_DM rhgb quiet [after] kernel /vmlinuz-2.6.32-696.1.1.el6.x86_64 ro root=/dev/mapper/vg_hoge-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_hoge/lv_root rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=vg_hoge/lv_swap rd_NO_DM rhgb quiet
この後リブートしたらちゃんと認識される。
% sudo lshw -c video [main] *-display description: VGA compatible controller product: Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller vendor: Intel Corporation physical id: 2 bus info: pci@0000:00:02.0 version: 06 width: 64 bits clock: 33MHz capabilities: msi pm vga_controller bus_master cap_list rom configuration: driver=i915 latency=0 resources: irq:27 memory:f7800000-f7bfffff memory:e0000000-efffffff(prefetchable) ioport:f000(size=64)
悪戦苦闘しつつドライバ導入まで成功したが、VAAPIは簡単には動かなかった。その記事はまた別途書く予定。 ざっくりいうと、libva/intel-vaapi-driver/libva-utilsの最新版をソースからビルドすればうまくいった。
PX-W3PE+CentOS6+recpt1+Chinachu γで録画環境構築
今までWindows上でEpgDataCap_Bonを使って録画環境を構築していたが、自宅サーバをLinux系一本にまとめたかったので更改することにした。 TVチューナーとしてPX-W3PEをしている関係でOSに縛りがあったので、普段利用しないCentOS6を入れたがとりあえず動いている。
OSの選定
PX-W3PEはRedhat系のドライバしか公開されていないので、とりあえずインストールしようとしたUbuntuの導入は断念。 また、Kernel 3.x系 (CentOS7等)では動作しないという情報もあり、CentOS6.9を導入することにした。
ドライバの導入
CentOS6.9のインストールは割愛。フィーリングでインストール。
ドライバファイルは現在公式サイトからはリンクが貼られない形になっている模様。 直リンクではダウンロードできるので、下記Wikiに貼り付けてあるURLからダウンロード www22.atwiki.jp
インストール方法は下記サイトを参考にした。またBCASカードリーダについても下記サイトを参考に。 quail.mydns.jp
recpt1の導入
上記サイトにも記載されているが、巷に出回っているrecpt1はPX-W3PEに対応してない。
そのため foltia ANIME LOCKER
に付属しているものを利用するか、PX-W3PEに対応したrectp1のソースを探し、コンパイルする必要がある。
それらしきリポジトリを発見したので使わせてもらっている。 github.com
導入方法はリポジトリ内のドキュメント参照
px_drv/px_drv.md at main · project-pp/px_drv · GitHub
arib25の導入とテスト
例によって下記サイトを参考にさせていただいた。 quail.mydns.jp
いろんなサイトにrecpt1の動作確認コマンドが乗っているが、PX-W3PEの場合は上記サイトの通りに、デバイスを指定してあげないとうまく動作しなかったので注意
recpt1 --device /dev/asv52202 --sid hd 24 10 ~/test.ts
mirakuru/chinachuの導入
基本的に公式Wikiを参考にすれば問題なし。いくつか補足する。 github.com
nodeのバージョン
CentOS6ではyumで入るノードのバージョンが必須環境であるnode6.5.0より下なため、自前で6.5.0以上7.0.0以下のものを入れる必要がある。 うろ覚えだが、nを使ってこんな感じに入れる
$ yum install epel-release $ yum install nodejs npm $ npm install -g n $ n 6.5.0 $ yum remove nodejs npm $ node -v v6.5.0
mirakurunのtunersコンフィグ
sudo /usr/local/bin/mirakurun config tuners
name: PXW3PX-S1 types: - BS - CS command: recpt1 --device /dev/asv52200 <channel> - - decoder: arib-b25-stream-test isDisabled: false - name: PXW3PX-S2 types: - BS - CS command: recpt1 --device /dev/asv52201 <channel> - - decoder: arib-b25-stream-test isDisabled: false - name: PXW3PX-T1 types: - GR command: recpt1 --device /dev/asv52202 <channel> - - decoder: arib-b25-stream-test isDisabled: false - name: PXW3PX-T2 types: - GR command: recpt1 --device /dev/asv52203 <channel> - - decoder: arib-b25-stream-test isDisabled: false
mirakurunのチャンネル設定
下記サイトを参考にした。ただし、mirakuru@2.1.0以上にはチャンネルスキャン機能があるので、そちらを利用するほうが良さそう www.jifu-labo.net github.com
これにて録画環境の構築完了。 この後、CentOS6でQSV(VAAPI)を使ったエンコード環境を作ろうと奮闘するのだが、それは別記事にて。
Node+Express+Mongodbでのログイン認証機能の実装
最近、Node+Express+MongoDBという環境でのログイン機能を実装する機会があったので、残しておきます。
MongoDB
必要モジュール
mongoDBを利用するために以下の3つをpackage.jsonに追加し、インストールします
- connect-mongo : セッションをMongoDBに保存するために利用
- mongoose : MongoDBと接続してfindしたりsaveしたり
- crypto : sha1ハッシュを計算するために利用
コード
必要部分のコードをまとめてみました。解説はそのうちするかも。
仮想HIDドライバvmulti (1) : コンパイルからインストールまで
仮想HIDデバイスドライバとして有名らしい「vmulti(Virtual Maltiple HID Driver)」について、日本語の情報が一切引っかからなかったので備忘録として書いていきます。今回はVisual Studio 2012でのコンパイル方法と、OSへのインストール方法をまとめてみました。どなたかのためになれば幸いです。
公式サイト
VMulti - Welcome to DJPSoft
vmulti - Virtual Multiple HID Driver - Google Project Hosting
簡易的なインストール方法はプロジェクトページWikiにもあります
BuildingAndInstallingVMulti - vmulti - Virtual Multiple HID Driver - Google Project Hosting
vmulti(Virtual Maltiple HID Driver)で何が可能なのか
以下のデバイスの入力をエミュレートすることができます。
- マルチタッチ
- マウス
- ディジタイザ
- キーボード
- ジョイスティック
例えば、このドライバに対して「マウスを相対位置指定で(100, 100)に移動させてくれ」とリクエストを投げると、実際にマウスドライバの動作をエミュレートしてくれて、マウスがちゃんと移動します。
マクロをドライバレベルで動作させたりする用途にも利用できると思います。
Windows Driver Kit(WDK)のインストール
注意: Visual Studioをインストールしていない場合は、先にVisual Studioをインストールしてください。
(そうしないと、Project作成画面にWDKが表示されません)
ソースのダウンロード
Google Project Hostingからソースをダウンロード/チェックアウトします。
下記ページからzipでも落とせます
/ - vmulti - Virtual Multiple HID Driver - Google Project Hosting
ソースは以下の4つのプロジェクトを含んでいます。
- vmulti: vmultiドライバ
- hidkmdf: Hid miniport to be used as an upper layer for supporting KMDF based driver for HID devices. (よくわからん)
- vmulticlient: vmultiドライバにアクセスするための静的ライブラリ
- testvmulti: 上記の静的ライブラリを用いて、実際にドライバを使ってみるテストアプリケーション
ソリューションを開く(vmulticlient, testvmulti)
ダウンロードしたzip内にあるソリューションファイル(vmulticlient.sln)を開きます。
Visual Studio 2012で開くと、アップグレードを要求されるので、OKしておきます。
このソリューションにはvmulticlientとtestvmultiのプロジェクトが入っています。
vmultiとhidkmdfは別ディレクトリにプロジェクトファイルのみが存在します。
vmultiとhidkmdfをVisual Studioで開き、コンパイルする
ファイル → 開く → Conver Sources/Dirs...
vmulti: ./vmulti/sys/sources
hidkmdf: ./vmulti/hidmapper/sources
一度これを行うと、それぞれのディレクトリにプロジェクトが作成されます。
これを、vmulticlientなどのソリューションに追加することで、ひとつのソリューション内で全て開発できます。
vmulti/hidkmdfのコンパイル
それぞれのプロジェクトでビルドすれば以下のファイルが生成されます。
- vmulti.sys
- vmulti.inf
- hidkmdf.sys
ビルドするときは、動作対象のWindowsバージョンとx64/x86を適切に選択しましょう。
vmulticlient/testvmultiをコンパイルする
普通にそのままビルドしても私の環境だとできなかったので、プロパティを少々変更しました。
windows.hが開けない
fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
プロジェクト → プロパティ → 構成プロパティ → C/C++ → 全般
にある「追加のインクルードディレクトリ」に以下を追加
$(WindowsSDK_IncludePath)
excpt.hが開けない
fatal error C1083: include ファイルを開けません。'excpt.h': No such file or directory
上記と同様に「追加のインクルードディレクトリ」に以下を追加
C:\Program Files %28x86%29\Microsoft Visual Studio 11.0\VC\include
ドライバのインストール
64bitOSを利用している場合、デフォルトだとドライバに署名がないとインストール出来ません。
自己署名をすることで回避可能だと思うのですが、うまく行かなかったので、苦肉の策として採用した、OSのテストモード化の方法と、自己署名作業を途中まで記しておきます。
いつか、自己署名が出来たら更新します。
テストモード
テストモードにすることで、未署名ドライバを動作可能です。ただしセキュリティ的によろしくありません。
bcdedit /set TESTSIGNING ON
その後、ドライバをインストールします
devcon.exe install vmulti.inf djpnewton\vmulti
自己署名
下記の方法でうまく行かなかったため、なにか間違っていると思われます。
どなたかご教授いただければ幸いです。
makecert
証明書を作成します。
makecert -r -n "CN=LocalSign" -ss LocalCertStore -sr LocalMachine -pe
mmc
作成した証明書を登録します。
- プログラムを指定して実行「mmc.exe」
- ファイル → スナップインの追加と削除 にて「証明書(コンピュータアカウント)」を追加
- LocalCertStore/証明書/LocalSignが存在するか確認する
- LocalSignを「信頼されたルート証明書」と「信頼された発行元」にコピー
inf2cat
カタログファイルを作成します
c:\Program Files (x86)\Windows Kits\8.0\Tools\x64> inf2cat /driver:"c:\tmp\vmulti" /os:7_x64
signtool
署名します
signtool sign /s LocalCertStore /n "LocalSign" /t http://timestamp.verisign.com/scripts/timestamp.dll vmulti.cat signtool sign /s LocalCertStore /n "LocalSign" /t http://timestamp.verisign.com/scripts/timestamp.dll vmulti.sys signtool sign /s LocalCertStore /n "LocalSign" /t http://timestamp.verisign.com/scripts/timestamp.dll hidkmdf.sys
devcon.exe
ドライバをインストールします
devcon.exe install vmulti.inf djpnewton\vmulti
うまくインストール出来たかどうかやエラーなどは以下のログファイルに出力されています。
c:\Windows\inf\setupapi.dev.log
C#でLua: LuaInterfaceの後継NLua
C#でLuaを利用するためのライブラリを探していたところ、LuaInterfaceというものが一般的に使われているということがわかった。
公式サイトに行ってみたところ、LuaInterfaceからforkされたNLuaというライブラリを作者がおすすめしていたので、そちらを使ってみることとした。プロジェクトページによると、Android/iOS/WPなど様々な環境で動作するらしい。
ダウンロード
NLua/NLua · GitHub
README.mdに記載されているダウンロードボタンからダウンロードすれば良い
参照の追加
Visual Studio 2012: プロジェクト→参照の追加→参照
基本的な使い方
基本的にLuaInterfaceと同様の使い方が可能のようだ。
おさきまっくら [C#][Lua]Luaのあれこれおぼえがき
2012-03-31 - 結果だけでなく過程も見てください
ただ一点注意として、Lua5.2を利用しているということが挙げられる。
ネット上にある多くのLuaInterfaceに関する記事はLua5.1向けに書かれており、そのままだと動かないことがある。
Lua5.1とLua5.2の違いについては以下のサイトを参照
Lua 5.1とLua5.2の違い - エンジニアのソフトウェア的愛情
staticメゾットの登録
あるクラスのstaticメゾットを登録したい場合以下のようにすれば良い。
オーバーロードがあるメゾットの登録
オーバーロードがあるメゾットはGetMethodの第二引数に対象メゾットの引数のタイプを指定してあげて特定すれば良い
モジュール
Lua5.2からはmoduleというものが使えなくなったらしい。
少し調べてみたが、代替機能が見つからなかったので、次のサイトを参考にmoduleを代替した。
Luaのモジュールを穴が空くまで見つめてみる - プログラミングの魔物
読み込み先ディレクトリを追加するにはpackage.pathを使う
requireのパスあれこれ | -闘いたい過去-
(注) ただし上記のサイトに書かれてるobj.getinfoはLua5.2で動かないっぽい
とりあえずこんな感じで使ってる
他プロセスのメモリを読む(C++編)
メモリの読み込み自体はWin32APIのReadProcessMemoryを使えば良い。
ただし、WindowsVista以降ではASLR(Address space layout randomization)機能により、実行ファイルなどの配置アドレスがランダムになっている。そのため、まずはその実行ファイルのメインモジュールの先頭アドレスを取得し、そこからの相対位置指定でメモリを読むことにする。
メインモジュールの先頭アドレスはPEB(Process Enviroment Block)内のImageBaseAddressの値を見れば良い。
(その他にGetModuleHandler(NULL)でも取得できるらしい)
ターゲットプロセスのハンドルを取得
プロセスのベースアドレスを取得
プロセスハンドルからNtQueryInformationProcessを使ってPROCESS_BASIC_INFORMATIONを取得する。
その中にPBEのベースアドレスがあるので、それを利用してReadProcessMemoryを行う
PBE構造体
既存の定義ではImageBaseAddressが載っていないので、以下の構造体定義を行う。
ベースアドレス取得
実際にメモリ内容を取得してみる
ドライバの自己署名
ドライバの自己署名で一部詰まったので、ここに残しておく
自己署名参考サイト
Microsoft Technet
http://technet.microsoft.com/ja-jp/library/dd919238(v=ws.10).aspx
詰まったところと解決法
inf2catが見つからない
inf2catにパスが通ってなかった。環境変数に追加するか、直接以下の場所で実行する
c:\Program Files (x86)\Windows Kits\8.0\Tools\x64> inf2cat /driver:"c:\tmp\vmulti" /os:7_x64
inf2catが見つからない(2)
cmd.exeだと実行できないっぽい?のでVSのコマンドプロンプトで起動する
スタートメニュ → すべてのプログラム → Microsoft Visual Studio 2012 → Visual Studio Tools→ VS2012 x64 Native Tools コマンド プロンプトを開く
inf2catを実行すると「<ファイル名> does not exist」というエラーがでる
下記のように実行するとエラーが出た。
c:\Program Files (x86)\Windows Kits\8.0\Tools\x64> inf2cat /driver:"c:\tmp\vmulti\vmulti.inf" /os:7_x64 c:\tmp\vmulti\vmulti.inf does not exist.
inf2catのdriverに指定するのは、.infファイル名ではなく、.infファイルがあるフォルダパスである。
直感的ではないので要注意
inf2catを実行すると「Parameter format not correct.」というエラーがでる
c:\Program Files (x86)\Windows Kits\8.0\Tools\x64> inf2cat /driver:"c:\tmp\vmulti\" /os:7_x64 Parameter format not correct.
先ほどのエラーと異なるので、.infの読み込みまではいったと勘違いしてしまったため、かなり時間を消費してしまった。
結論としては、指定したパスの最後が「\」で終わってることが原因であった。
「\」を削除して「c:\tmp\vmulti」に変更したら問題なくなった。
inf2catを実行すると「DriverVer set to incorrect date」というエラーがでる
c:\Program Files (x86)\Windows Kits\8.0\Tools\x64> inf2cat /driver:"c:\tmp\vmulti" /os:7_x64 ...................... Signability test failed. Errors: 22.9.7: DriverVer set to incorrect date (postdated DriverVer not allowed) in \vmulti.inf. The current date (UTC) is 9/2/2013.
今回は、エラーメッセージが親切である。.infファイル内のDriverVerを表示されている日時(UTC)より前に修正してやれば良い。
.infを自動生成した時に、DriverVerにJSTでの現在時刻が挿入されたことが原因であった。
DriverVerにはUTCで記述する必要がある