Vaio Z Canvas
いままで持ち運び用として新しいMacBook12インチ使ってたんですが、もうLinux入れるのが相当厳しそうだし、そもそもGentooには厳しいスペックなので結局新しいマシン買いました。(一ヶ月以上前ですが)
Vaio Z Canvasです。
» 続きを読む…
いままで持ち運び用として新しいMacBook12インチ使ってたんですが、もうLinux入れるのが相当厳しそうだし、そもそもGentooには厳しいスペックなので結局新しいマシン買いました。(一ヶ月以上前ですが)
Vaio Z Canvasです。
» 続きを読む…
持ち運びすげー楽で、Windows,Mac,Linuxが使えるから仕事もできるしって感じで、新しいMacbook (12インチ) を買ったが、Linuxが動かず困っている。
いろいろと調べても動かないという情報ばかり。というかググりづらすぎる。Macbook 12ってやると2012年のMacBook Proが出てきたりするし、New MacbookとかってやってもNew Macbook Proが混じる。Macbook 8,1とかやってもPro。世の中はProばかり。
厳密に言うとUbuntuのLiveとかは動くことは動くんだけど、キーボード、マウス、SSDコントローラーが動かないからほとんど何もできない。。。
仮想化は断じてせぬ。
LinuxやMacをそれぞれサーバーとかクライアントにして使ってますが、クライアントがMacの場合だけ、マウスとか、テンキーだけはなぜか使えて、それ以外のキーボードが使えないという問題に悩まされていた。(Linuxがクライアントの場合は大丈夫でした)。SyneygyKMでも使用不可。
ようやく解決方法が見つかったのでメモ。
解決法は 【マウスもキーボードも】Synergy【みんな共有】@2ch にありました。
上記にあるように、Mac側で環境設定→キーボード→入力ソースで「Unicode Hex Input」を有効するだけ。これキーボード使用時に入力ソースとして選択されている必要はないっぽいです。
ややおかしい部分もありそうですが、とりあえず使えるようになってよかった。
ちなみに環境は
です。
NetworkManagerを使用しているが、いろいろとアップデートしたあとにネットが接続・切断を繰り返す症状をたまに起こす。
うちの場合はNetworkManagerの設定 (Gnomeの設定→ネットワーク) から対象アクセスポイントのIPv6を切ればとりあえず接続はできるようになる。
NetworkManagerとかカーネルとか含めて色々更新しちゃったから何が原因かよく分かってないけど、多分NetworkManagerアプデしたからでしょう。
ただデュアルスタックだけどIPv6使ってはいるから、どうにかしたいなぁ。
(追記1) なんか有線LANと無線LANのIPv6アドレスがかぶっているっぽい。。。よく見たらdnsmasqの設定まちがえてた。。。でも解決せず。ていうかKernel Panicする。
(追記2) net-misc/dhcp-4.3.1, net-misc/networkmanager-0.9.10.1_pre20141101, gentoo-sources-3.18.1 の組み合わせで行ったらIPv6 Onの状態でも比較的安定している。気がする。
Linux Kernel 3.18 がでて昨日ようやくgentoo-sourcesまで落ちてきたので更新した。
いつものごとく、broadcom-sta がビルドできないが、色々探してパッチ (今回は marineam 氏のオーバーレイのものを使った) を /etc/portage/patches/net-wireless/broadcom-sta へぶち込んで無事にビルド。
特に問題無し。
しかしWebcamはどうしたものか。。。
NFSでマウントしたディレクトリににたいして、許可されたグループのメンバーからアクセスしてもAccess Deniedされて若干ハマった。
状態としては以下のような感じ。
### 状態確認 $ pwd (NFSマウントされているの場所) $ ls -lah 合計 29K drwxrwxrwx 3 good-group good-group 7 10月 7 11:00 . drwxrwx--- 7 hoge good-group 7 6月 9 12:00 .. -rw-rw-rw- 1 hoge good-group 15K 10月 1 00:00 test-good.txt $ id uid=1000(fuga) gid=1000(fuga) groups=1000(fuga),10(wheel),14(uucp),18(audio),19(cdrom),27(video),35(games),80(cdrw),85(usb),100(users),250(portage),973(vboxusers),993(pulse),998(plugdev),1000(fuga),1011(bbb),5001(ccc),5002(ddd),5003(eee),5004(good-group) ### アクセスしてみる $ cat test-good.txt cat: test-good.ods: 許可がありません ### NFS以外はOK $ cat /home/taka/test-home.txt This is a test file.
(ちなこにここで、idで出てくるグループ数が多いのがミソだった)
クライアントでもメンバーだし、サーバー側でもメンバーになっている。
どうにも分からんし、ググってもピンとこない (というかそもそもどうググればいいか、キーワードが分からん) ので、NFSが読めるわけではないがWiresharkさんなら解読してくれるだろうとの願いで、とりあえずキャプってみる。
なんか Auxiliary GIDs で所属グループIDのリストを送ってるっぽいですが、後半が省かれてますね。16個までしか送られてない。なんか個数的にもこれはどっかの制限で切られている予感。
ちなみにそもそもLinuxユーザーとかのレベルのアクセス制御は全部クライアントでやってると思ってたので、リストを送ってたりすること自体知らなかった。。。 (この問題に遭遇した時に若干もしやという気もしたけど)
これらのヒントを元に調べた所だと、どうやらグループ数が16を越えると上手く動かないケースがあるようで。
Solving the NFS 16-Group Limit Problem
この記事によると、
(ただし2011年の記事なので状況が変わってるかも)
ということで、 rpc.mountd の –manage-gids オプションを使ってサーバー側でGroup IDを管理する方法がベストの方法として取り上げられている。
が、ちょっとサーバがFreeBSD (というかFreeNAS) で、どこいじれば正攻法なのかパッと分からんので、とりあえず一旦グループ数を減らす方向でトライ。
### 状態確認 $ pwd (NFSマウントされているの場所) $ ls -lah 合計 29K drwxrwxrwx 3 good-group good-group 7 10月 7 11:00 . drwxrwx--- 7 hoge good-group 7 6月 9 12:00 .. -rw-rw-rw- 1 hoge good-group 15K 10月 1 00:00 test-good.txt $ id uid=1000(fuga) gid=1000(fuga) groups=1000(fuga),10(wheel),14(uucp),18(audio),27(video),35(games),85(usb),100(users),973(vboxusers),998(plugdev),1000(fuga),1011(bbb),5002(ddd),5003(eee),5004(good-group) $ cat test-good.txt This is a test file.
とりあえずうまくいった。
使っているタブレットのGPS精度がいまいちかつ、記録アプリがかなりクソで思わず窓から投げ捨てそうになったので、ちゃんとしたGPSロガーを購入することにした。色々調べたところigot-UのGT-900Proにした。腕時計型のロガー。
個人的にいいとこ:
個人的にわるいとこ:
購入にあたり参考にしたサイト:
たぶん自転車とか、ランニングで使うことを念頭に置かれたものなんですね。
ちゃんとしたロガー買ったので、OpenStreetMapのマッピングにも寄与しようかと。
特によく行く小さい離島とかは、地図があんまないし、Google Mapでも全然道がわかんなかったりするので。 (現状でもOpenStreetMapのがよくできてる離島は多々ある。どっちも適当な島も多々ある)
ところでこれ、gpsbabelでも使用できず、そのままではLinuxで使えない。ググって見たところいくつかi-gotUシリーズ向けのプログラムはあるようだ。
しかしながら前者はGUIのみのJavaプログラム、後者は多分古すぎてGT-900Proでは使えないC++のプログラム (そもそもうちの環境でビルドできず・・・) でした。とりあえずCLIで簡単に使えるプログラムが無い。やりたいことはデータダウンロードと消去だけなのに。
ただ、それぞれ通信プロトコルの資料が書いてあり、そんな難しそうでもなかったのでPythonで簡単なCLIプログラム書きました。pygotuとして、Mercurialレポジトリに公開してます。
とりあえずデータのダウンロードはできます。Purgeがまだできません。意外と難解である。
ということでそのうち続きをやる。
参考リンク
ストリームいじってるプログラムを書いたりしていたんだけど、なんかいろいろあるストリーミングサービス (ustreamとか) のURLなげたらうまい具合に探ってもらって簡単にストリームを抜き出せるライブラリとかあったら便利そうじゃね?
とかおもってたけどまぁフツーにありました。
コマンドラインから利用できて、あとPythonでできてるのでPythonのライブラリとして使用できる。あと使って無いけどWindowsでも動きそうなかんじ。大変素晴らしい。
25個ぐらいのサービスに対応してるようです。さすがにニコニコとかは無い。
恒例のGentooハマり。
Kernel 3.12から3.13や3.14にカーネルアップするとどうもうまく動かなかった。
具体的には、ディスクマウントのところでタイムアウト (ログには「Timed out waiting for device dev-sda6.device」とか出る) したり、nouveauのドライバで初期化にこけたり。
いろいろと調べつつ、以下の二ヶ所直せばとりあえず動いた。
/etc/fstabの全てのディスクとNFSの行に「noauto, x-systemd.automount」オプションをつける。
Gentoo Forums :: View topic – Systemd timing out during local disk mount
ここみてやってみたら動いた。ただ「temporarily fix」だよと言っている。
なんかfsckとかぶったりしてうまくいかないっぽい。
systemdをemergeしたときに完全に見落としていた。こんなメッセージが出る。
* Messages for package sys-apps/systemd-208-r3: * CONFIG_SYSFS_DEPRECATED: should not be set. But it is. * CONFIG_SYSFS_DEPRECATED_V2: should not be set. But it is. * Please check to make sure these options are set correctly. * Failure to do so may cause unexpected problems.
これをOFFってなかった。非常に残念なミス。
system # cd /usr/lib/systemd/system system # diff zabbix-agentd.service zabbix-agentd.service.orig 9c9 < ExecStart=/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf --- > ExecStart=/usr/sbin/zabbix_agentd
import wnck, gtk screen = wnck.screen_get_default() screen.force_update() windows = screen.get_windows()これでウィンドウリスト (WnckWindowのリスト) が得られる。これに対して、
w = windows[0] w.get_name() # Window Name w.get_application().get_name() # Application Name w.get.get_class_group().get_name() # Class Nameこんな感じで情報を取得し、
w.set_geometry(wnck.WINDOW_GRAVITY_CURRENT, wnck.WINDOW_CHANGE_X | wnck.WINDOW_CHANGE_Y, 100,100,0,0) w.set_title("新しいタイトル") gdk_w = gtk.gdk.window_foreign_new(w.get_xid()) gdk_w.set_decorations(0) # デコレーションの削除 # 反映させる gtk.gdk.window_process_all_updates() gtk.gdk.flush()こんな感じにウィンドウが操作できる。
172.29.4.50 - - [12/Mar/2014:22:59:39] "GET /info HTTP/1.1" 200 4 "" "Mozilla/5.0 (X11; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0" [pid: 15271|app: 0|req: 6/6] *.*.*.* () {32 vars in 508 bytes} [Wed Mar 12 22:59:39 2014] GET /set_center/info => generated 4 bytes in 6 msecs (HTTP/1.1 200) 4 headers in 138 bytes (1 switches on core 0) Wed Mar 12 22:59:41 2014 - !!! uWSGI process 15270 got Segmentation Fault !!! Wed Mar 12 22:59:41 2014 - *** backtrace of 15270 *** Wed Mar 12 22:59:41 2014 - uwsgi(uwsgi_backtrace+0x25) [0x431ea5] Wed Mar 12 22:59:41 2014 - uwsgi(uwsgi_segfault+0x21) [0x431f81] Wed Mar 12 22:59:41 2014 - /lib/x86_64-linux-gnu/libc.so.6(+0x324f0) [0x7fa477a794f0] Wed Mar 12 22:59:41 2014 - /usr/lib/libstartup-notification-1.so.0(sn_xcb_display_new+0x109) [0x7fa47201fa89] Wed Mar 12 22:59:41 2014 - /usr/lib/libstartup-notification-1.so.0(sn_display_new+0x2d) [0x7fa47201fb3d] Wed Mar 12 22:59:41 2014 - /usr/lib/libwnck-1.so.22(wnck_screen_get+0x117) [0x7fa474660617] Wed Mar 12 22:59:41 2014 - /usr/lib/python2.7/dist-packages/gtk-2.0/wnck.so(+0xa809) [0x7fa4748ac809] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x56fd) [0x7fa47521d04d] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x5b7b) [0x7fa47521d4cb] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x848) [0x7fa47521e2e8] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0xa6917) [0x7fa475274917] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0x184810) [0x7fa475352810] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_CallObjectWithKeywords+0x47) [0x7fa475304647] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyInstance_New+0x7b) [0x7fa4752ec58b] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x2a57) [0x7fa47521a3a7] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x5b7b) [0x7fa47521d4cb] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x848) [0x7fa47521e2e8] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0xa6917) [0x7fa475274917] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x2a57) [0x7fa47521a3a7] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x848) [0x7fa47521e2e8] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0xa6917) [0x7fa475274917] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0x184810) [0x7fa475352810] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0x11c1ac) [0x7fa4752ea1ac] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x2a57) [0x7fa47521a3a7] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x848) [0x7fa47521e2e8] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0xa6806) [0x7fa475274806] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0x184810) [0x7fa475352810] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0xcbdf6) [0x7fa475299df6] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x27dd) [0x7fa47521a12d] Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x5b7b) [0x7fa47521d4cb] Wed Mar 12 22:59:41 2014 - *** end of backtrace *** Wed Mar 12 22:59:41 2014 - DAMN ! worker 2 (pid: 15270) died :( trying respawn ... Wed Mar 12 22:59:41 2014 - Respawned uWSGI worker 2 (new pid: 15296)最初はなんかcherrypyかuWSGIのスレッドが有効になっちゃってて変な事がおこっているかと思ったけど、どうやらPython初期化後にforkしてからGTKとかX11のAPI使っているから発生しているよう。(断定的に調べていないので違うかも。) uWSGIのlazyオプションを指定するとfork後の初期化になるようなので、それで改善した。
大地震からも日が経ち、節電という言葉もだんだん聞かなくなりつつあるなか皆様いかがお過ごしでしょうか。
なんて偉そうな事言いつつ今回のはあまりそれとは関係ないんですが、前々から会社のいろいろな機材 (サーバーとか) で使ってる消費電力のモニタとかやりたいなぁと思っていたりして、ワットモニターUSBとか、スマートコンセントとか電力計の類をいろいろ調べてたんだけど、先週とある電気量販店でF-PLUGなるよさげなものを発見した。
とまぁこんな感じです。これを使って、いろいろとデータをとってLinuxサーバーでモニタすればなにかいいことが起きるに違いないということでこれを購入。ソフトウェアは公式にはどうやらWindows用しかないようだったけど、とりあえずBluetooth (RFCOMM) ならLinuxでも比較的簡単に何とかなるだろうという目算。
とりあえず/dev/rfcomm0を使えるようにするまでの接続はググって出てきたところ (→Rasperry PiにF-PLUGを2個繋いでみた 等) を参考に。まぁ普通のRFCOMM機器の接続手順です。
あとどうやらOBDNマガジンなるものにはfplug_for_linuxなるソフトウェアが掲載されているようで、とりあえずそれを使えば現在値の取得 (電力値[W]と温度・湿度・照度) まではできた。
リアルタイムでのいろいろな値をモニタするものやりたかった事だけど、一番やりたかったのは積算の消費電力量 [Wh] を出すこと。上記のものではそこまでの機能は提供されていない。
まぁ一秒ごとに電力値を計測して足していけば積算電力もだせるだろという話もあるけど、なんか無駄な感じするし、そもそも二秒おきぐらいにしか計測できないので誤差がけっこう出る気がして気持ちが悪い。
ということで作る。上記は簡単な小物作りには面倒なC言語で作られていたので、結局全部Pythonで書き直すことにした。
幸いなことに、(というかなぜか?) データの仕様がまるっと公式ページ (F-PLUGメッセージ一覧) に掲載されていた。正直かなり見づらい上に若干不正確 (というか舌足らず?) だったりもするけど、こういうものがあるだけでかなり助かる。なんかもともと業務用のなんかの製品だったりするのかな。
まぁということでひたすらこのコードを打ち込む。
とりあえず制御用ソフトウェアをせっかく作ったので、現段階までにできたものを公開しときます。
まだUIはありません。作ってません。pyfplugモジュールにある FPlugDevice クラスでF-PLUGの操作ができます。ほとんど全ての機能が使えると思います。
ちなみにDebian 7とGentoo Linux (ともに64bit) で動作確認してます。
それは分かりません。かなりざっと不真面目にしか確認してないです。
これじゃ (精度計測としては) 参考にもならないですね。ただまぁこの感じからすると大きく外れた値はないので、とりあえずつくったプログラムはある程度正しく動いてるんでしょう。
他の所の報告ではそもそも個体差がけっこうたったりして、それなりの誤差があるようです。