ラベル パソコン管理・設定 の投稿を表示しています。 すべての投稿を表示
ラベル パソコン管理・設定 の投稿を表示しています。 すべての投稿を表示

2018年2月8日木曜日

cygwinのアップデートがやたら遅くて時間がかかる。(解決)

タイトルのとおりだが、cygwinのアップデートがやたら遅くて完璧に頭に来てた。
何時間も待っているが、autorebaseとやらがいつになっても終わらない。
インストールウィンドウを見ると、0p_000_autorebase.dash と表示されたまま固まっている。HDDは、ガリガリ止まらない。

ぐぐってみると、この問題で、怒ってるっぽい人は結構いるようだが 、我慢するかなんか難しい対応をしてるひととかいたけど、中に
原因はRapportというウィルス対策ソフトについてくるTrusteer エンドポイント保護というソフトが悪さをしていたようです。Rapportは三菱UFJ銀行のお勧めで無料ウィルス対策ソフトとしてインストールしたのですが、それが災いしていたようです。やはりタダより高いものは無いですね。
(引用元:http://soukitaisyoku-kigyou.blog.so-net.ne.jp/2016-11-08)
というのがあり、「あっ」と思い、norton360の「設定->ウイルス対策->自動保護」をオフにしたら今までのがウソのようにスイスイ進むようになった。

タダどころか天下のノートン先生でもこれでした。ちょっと遅くなる程度でなく、何十倍もじかんがかかるとかなんだかなぁ。


Ubuntu16.04のカーネルアップデート(to 4.13)でNVidia driverが認識しなくなった(解決)

Ubuntu16.04で、
sudo apt dist-upgrade
したら、 NVidia driverを認識しなくなった。
nvidia-smi を実行しても、
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. 
という、連れない返事・・・

driverは、aptで入れていて、パッケージ名は、「nvidia-387」
どうやら、ソイツが、kernel4.13に対応していないらしい

↑のリンク記事だと、kernel4.10に戻して動かしていたが、
sudo apt install nvidia-
まで、打ち込んだところでtabキーを押してみると、候補の中に「nvidia-390」 がいたので、
sudo apt install "nvidia-*390*"
で、入れてみた。自動で387もアンインストールされるようだ。かしこいなぁ。
その後、再起動して無事認識しました。

2017年11月15日水曜日

Ubuntu16でnouveauドライバをアンインストールする。

Ubuntu16のマシンからnouveauドライバをアンインストールしたときの記録です。
 Ubuntu16のマシンにNVidiaのグラボを挿してNVidiaのドライバを入れたのですが、少し動作が不安定なので、nouveauドライバを抜いて様子を見ようとしたのが動機です。
なお作業は、sshでコンソールログインして行っいました。
 
NVidiaのドライバを入れた後に、lsmodをすると、
mxm_wmi                16384  1 nouveau
video                  40960  1 nouveau
i2c_algo_bit           16384  1 nouveau
ttm                    98304  1 nouveau
drm_kms_helper        155648  2 nouveau,nvidia_drm
な感じで、 nouveauドライバが入りまくっている。こいつらを消したい。
cudaは動くので、NVidiaのドライバが入っていることは確実。

まず、/etc/modprobe.d/blacklist-nouveau.conf を作成し中身を
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off 
としました。次に、dpkg -l | grep nouveau で見つけたあやしいやつを削除
sudo apt purge xserver-xorg-video-nouveau
 その後、
update-initramfs -u
これで再起動したら、lsmodしても綺麗サッパリnouveauが見えなくなりました。

2017年11月10日金曜日

ラズパイ3&バスパワースピーカーのノイズ退治(3.5mmジャック使用)

Raspberry pi3とバスパワースピーカーと3.5mmオーディオジャックの組み合わせで「強烈な」バックグラウンドノイズがのっていたのを解決した一例としてアップしておきます。

高音質にする、とかいう話ではなく、連続的な耐えられないノイズが発生していたのでそれを取った話です。

3.5mmオーディオジャック関連のノイズでは、ネットで
いろいろあったけど、ググっても見ないパターンでハマりました。

自分の場合↓の図のように接続していました。
これで、「ズビズビズビ、ピキーピピ、ズズビビ」のような、いかれたノイズが鳴り続けていました。どうやらこれは、電源系のノイズだったらしく次のようにつなぎ替えたらノイズが治まりました。
 バスパワースピーカーの電源を、別のACアダプタから取るのがポイントで、「ラズパイから電源を取らなきゃいんじゃね」と2個口以上あるUSBポートから、ラズパイとスピーカーの電源をとってしまうとノイズは消えませんでした。
 自分の場合は、ACアダプタ2つだとかさばるので、コイツを使って省スペースにしました。
この場合、一つの機器からラズパイとスピーカーの電源をとっていますが、片方がUSBポートで、もう片方が100Vに別のACアダプタをつないだものなのでOKでした。
つまり、ラズパイのオーディオジャックととバスパワーのスピーカーを使う場合、両方の機器の電源が一つの5Vの系にあるとノイズが発生するようです。

2017年2月27日月曜日

Ubuntu Classic Server 16.04 on Raspberry Pi3 で固定IPに変更

タイトル通りの単純な話のはずだったんだけど、なかなかうまくいかなかったので、エントリアップ。
最初に、ありがちな/etc/network/interfacesの最後に
    # eth0設定
    auto eth0
    iface eth0 inet static
      address 172.20.XX.XX
      network 172.20.0.0
      netmask 255.255.0.0
      broadcast 172.20.255.255
      gateway 172.20.YY.YY
な感じで、追加したんだけど、起動してみたら確かに、指定したアドレスのIPを持ってたんだけど、それとは「別に」DHCPでもアドレスを取得していてそっちでもアクセスできちゃう。

さらに気持ち悪いことに、ifconfigをやってみると、なぜかDHCPで取ってきたアドレスだけ表示されて、↑で指定したアドレスが見えない。
{なんじゃろなー・・・}
と思い /etc/network/interfaces を見てみると、
    source /etc/network/interfaces.d/*.cfg
てな行があったので、
{こいつか}
と探すと、/etc/network/interfaces.d/50-cloud-init.cfgがいた、このページを見た感じ、これ変えりゃ行けるっぽかったので、このファイルに設定を移して、rebootすると、指定アドレスでなくDHCPになっている。

{オレなんかミスったか?} 
/etc/network/interfaces.d/50-cloud-init.cfg を見ると編集前の状態に戻っている。
{はっーー!? なんじゃそりゃ?} 
もう一回やったが、全く同じ現象・・・
どうやら、cloud-initさんとやらが起動時に勝手に書き換えちゃってくれているらしい。

ちょっと調べると、ビンゴなタイトル「how to set static ip in ubuntu 16.04 on raspberry pi 3 (cloud-init)?」のページがあったんだけど、回答はついてなくて、コメントで
「sudo apt remove cloud-init やったら動いたょ」
「えーっ。cloud-init使う方法ないの?」
みたいなやりとりがあって微妙。

他にもIP変えようとして、苦労して解決したけどcloud-initへの怒り丸出しなページ も発見、しかし、うちのケースには役に立たずがっかり。

{うー。ちゃんとしたドキュメント見つからないなーー。}
とさまよっていると、RedHatのユーザー向けページに「cloud-init に関する FAQ」 なんてやつを発見。結構丁寧に書いてあるが、↑で最初に書いたような設定を、meta-data ファイルに書けとの司令。

{うーむ、meta-data ファイルって何・・? っていうか、どこ・・?}
公式 見ても、ググっても何か埒あかないので、頭来て、
sudo find / 2>/dev/null | grep meta-data
で、ルートから探してやったら、
    /var/lib/cloud/seed/nocloud-net/meta-data 
{なんすかそこは? 見つかんないよそれは・・・}
で、その見つけたファイルに
network-interfaces: |
  auto lo
  iface lo inet loopback

  auto eth0
    iface eth0 inet static
    address 172.20.XX.XX
    network 172.20.0.0
    netmask 255.255.0.0
    broadcast 172.20.255.255
    gateway 172.20.YY.YY
bootcmd:
  - ifdown eth0
  - ifup eth0
って追加したらやっとまともに動きました。

動きはしたんですが、 /etc/network/interfaces.d/50-cloud-init.cfg はdhcpのままなんすよね。/etcをgrepしても、↑で指定したアドレスを含むファイルは無いようだし、cloud-init 全然理解してないです。

2016年10月20日木曜日

opencv2系をgcc6でコンパイルしたらエラーになった

opencv2.4.13をubuntu16.10環境(gcc6)でコンパイルしたらこんなエラーが出て止まった。
In file included from /usr/include/c++/6/bits/stl_algo.h:59:0,
                 from /usr/include/c++/6/algorithm:62,
                 from /opencv-3.1.0/modules/core/include/opencv2/core/base.hpp:53,
                 from /opencv-3.1.0/modules/core/include/opencv2/core.hpp:54,
                 from /opencv-3.1.0/modules/core/include/opencv2/core/utility.hpp:52,
                 from /opencv-3.1.0/build/modules/core/precomp.hpp:49:
/usr/include/c++/6/cstdlib:75:25: fatal error: stdlib.h: そのようなファイルやディレクトリはありません
 #include_next <stdlib.h>
{stdlib.hがありませんって、そんなわけねーだろ!}
一瞬、あせったけど、cmakeで
-D ENABLE_PRECOMPILED_HEADERS=OFF
付けとけば、とりあえずOKっぽい。
opencvの方がおいおいgcc6対応すると思うけど、今のところこれで切り抜けられそうです。

2016年10月6日木曜日

docker buildしたときに、Dockerfileがシンボリックリンクだと失敗する。

タイトルのまんまなんだけど、docker buildしたときに、Dockerfileがシンボリックリンクだと失敗する。こんなエラーね。
% docker build -t image-name:tag-name .

unable to prepare context: The Dockerfile () must be within the build context (.)
そんなときは、リダイレクトでぶち込むととりあえず動きます。
% docker build -t image-name:tag-name - < Dockerfile
pathのところがハイフンになっている所に注意です。

追記
しかし、上の方法だとADDやCOPYでのファイルのコピーができません。
{ムキーッ。動かないし、あわてて上のエントリだしちまって、アホ丸出しだぜ。}
でこんなふうにやってみた。
# -f で相対パス指定 -> ダメ
%  docker build -t image-name:tag-name -f ../another-dir/Dockerfile .
unable to prepare context: The Dockerfile ({.の絶対パス/Dockerfile}) must be within the build context (.)

# -f で絶対パス指定 -> ダメ
%  docker build -t image-name:tag-name -f /xxx/another-dir/Dockerfile .
unable to prepare context: The Dockerfile ({.の絶対パス/Dockerfile}) must be within the build context (.)

# zsh使ってるのでプロセス置換 -> ダメ
% docker build -t image-name:tag-name -f <(cat Dockerfile) .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /proc/29179/fd/pipe:[1290842]: no such file or directory   
{う~む。かなり、頑固だなあ。}
dockerは、どうしてもcontext dirにDockerfileの実体がないと動いてくれないらしい。
しかたないので、簡単な build.shを↓のように書いてみた。
#!/bin/bash

if [ $# -ne 1 ]; then
  echo "usage: build.sh tag_name" 1>&2
  exit 1
fi

rsync symlinkしてたDir/Dockerfile Dockerfile
docker build -t image-name:$1 .
動いたよ。

しかし、ここでもしやと思い、build context dirの外を向いているsymlinkをDockerfileのCOPYで、コピーしようとしてみたら、こんなエラーが
lstat symlinkの名前: no such file or directory
{docker buildは、徹底的にsymlinkが嫌いなようだ。今回は敗北感が大きいな・・・}
とにかく、dockerさんは、dockerfileやCOPYしたいファイルの「実体」があるところでbuildしてくださいといいたいのだろう。

そして、dockerfileの変更はsymlinkで同期させるのでなく、build可能な、contextディレクトリをgit等で管理するのが作法だぞということなのかもしれない。

仕方ない、従いますよdockerさん。ここまで、読んでくれた方、もしいらしたらごめんなさい。dockerfileをsymlinkにするのはやめたほうがいいと思います。

2016年6月10日金曜日

Ubuntu14のGUIをリモートコントロールしたいならX2Goだ!

自分は、最近Ubuntuを気に入って使ってるんだけど、リモートでGUIを動かす機会が多い。

いままで、vncserverかNoMachineを使ってたんだけど、最近見つけたX2Goがよくて、激しくおすすめしたいので、記事にしてみた。

普通、第一選択肢になることが多いのがvncserverを立てての接続なんだけど、これだと結構、日本語入力でハマることが多い。
自分の場合、Ubuntuが何台かあって(違う人がセッティングしてたりする)、自分が作業するときは、いつもこの設定をするんだけど、なぜか毎回違うところでハマる。

うまくいってるマシンから ~/.vnc/xstartup をコピッて来ても、他のマシンでは動かなかったり(足りないmoduleが無いわけじゃなくても動かん)、fcitxを使ってると日本語入力できないことが多かったり(動くマシンもある)。さっぱりわからん。

NoMachineの場合、日本語入力の問題は出ないのだけど、無料版だとディスプレイに表示されている画面のコントロールになってしまい、やってることが丸見えなだけでなく、そこに誰かいたら簡単に乗っ取られてしまうので危なっかしい。

で、今回もvncserverの設定をしてて、うまくいかなかくてキレてたところたまたまみつけたのが、X2Go
親切な解説はココ。とくに設定しなくても、あっさり日本語入力できて感激。

UbuntuのリモートGUI操作で、日本語入力に困ってる方は一度使ってみるといいと思います。

xfce4のターミナルでtabキーでコマンド補完が効かない時の対処

xfce4を使ったら、ターミナル内でコマンド補完が効かなくて困った。
shift+tabやctrl+iでは、コマンド補完が効く状態。

対処方法は、
https://www.starnet.com/xwin32kb/tab-key-not-working-when-using-xfce-desktop/にあったんだけど、日本語化してる場合の設定箇所をメモ。

アプリケーションメニュー -> 設定 -> ウィンドウマネージャー -> keyboardタブ -> 同じアプリケーションのウィンドウの切り替え 設定をクリア
で、tab補完復活しました。

2016年5月19日木曜日

Ubuntu14.04で、extra-cmake-modulesを使いたい & apt-getできないパッケージの探し方

Ubuntu14.04を使ってて、githubからfcitx-qt5を落として使おうと思ったんだけど、cmakeをかけると、こんなエラーが出た。
CMake Error at CMakeLists.txt:8 (find_package):
  Could not find a package configuration file provided by "ECM" (requested
  version 1.4.0) with any of the following names:

    ECMConfig.cmake
    ecm-config.cmake
{なんじゃ、このECMってのは? しゃーない入れるか。}
と調べると、 extra-cmake-modules というもののよう。
これを使うと、どうも CMakeLists.txt が書きやすくなるものらしく、最近cmakeの際に、ECMを必要とするプロジェクトが増えている様子。 例によって、
sudo apt-get install extra-cmake-modules
してみたが、
E: パッケージ extra-cmake-modules が見つかりません
と怒られた。
{えーっ。ないのかー。探すか・・・}
Ubuntuだと、このECMっちゅうのは、14.10からの導入らしく14.04の標準リポジトリには、存在しない。 しかも、Ubuntu14.04 extra-cmake-modules ECM apt-get とかのキーワードをいろいろ組み合わせてググってもパッとしない。
結局、見つかったんだけど、それがここ。一見、14.04用ないじゃん・・・ ってなるけど、わかりにくく下の方に、
Other versions of ‘extra-cmake-modules’ in untrusted archives.
てあるので、そこ開いてTrusty(14.04のこと。わかりにくいから数字にしてくれ・・・)を叩くと、非公式リポジトリの説明ページに飛ぶから、そこの情報に従い、
sudo add-apt-repository ppa:ubuntu-sdk-team/staging
で、リポジトリ追加して後は、お決まりの
sudo apt-get update
sudo apt-get install extra-cmake-modules
で、無事ECM追加できて、cmakeもあっさり通った。
今回お世話になった、パッケージ情報がたくさんある launchpad.net なんだけど、Ubuntuのパッケージを探すときには、注意点があって、トップページにある検索窓に、パッケージ名(例:extra-cmake-modules)を打ち込んでも、結果のExact matchesには、ソースパッケージの情報しかでてこない。(お目当てのモノは、下のずらーーーっの中に埋没している。)
なので、Ubuntuパッケージのページの検索窓を使う。こっちは、Exact matchesにちゃんと実行できるパッケージが出るので、そのから探すと速いです。

2014年4月17日木曜日

[linux]sshで鍵認証を行う際、commandに任意の引数を与えたい!

自分は、以前は{Windows命}だったのですが、最近linuxを使うようになって、便利なツールやコマンドが大量にあるので、{あれ、もしかしてなんか自動でやらせたりする時にはすっごく便利かも}と思うようになってきました。
もちろん、コマンドがいっぱいあり過ぎてとても全貌はつかめないのですが、自分が思いつくような処理はだいたいやる方法があります。
今回は、あるマシンから別のマシンのコマンドをある程度セキュリティを保ちながら、ビシバシ自動で実行するというところまで、結構大変だったのでメモをだらだらと残します。

あるクライアントマシン(以下C)からサーバー(以下S)上のコマンドをC上のプログラムやらcronやらから自動で実行したいとします。
話が長いので先にまとめると、
・ CからSのいろんなコマンドを自動で実行したい。
→ Sにログインするとき、自動でsshのパスワード入力ができなくて困る。
→ パスフレーズ無しの秘密鍵を使用したssh鍵認証を使用する。
→ パスフレーズ無しなので、秘密鍵ファイルさえあればS上でやりたい放題なので困る。
→ Sのauthorized_keysにcommandを書いてそのコマンドしか実行できないようにする。
→ CからSに投げたいコマンドは1つじゃないし、パラメータとかも変えたいので困る。
→ sshの機能を使いCからSに環境変数を渡して解決。

1: ssh鍵認証でログインできるようにする。
まず、C上で、公開鍵と秘密鍵を作成します。(参考にしたページ)
client$ ssh-keygen -t rsa
# 途中で秘密鍵のパスフレーズを聞かれるので、ただエンターすればパスフレーズ無しになる。 
# ホームの.sshにできた、id_rsa.pubが公開鍵で、id_rsaが秘密鍵。
今度は、Sに先ほどCで作った公開鍵(id_rsa.pub)をどうにかして持っていって、ログインしたい「Sのユーザー」のホーム下の.ssh/authorized_keys
の一番最後に、id_rsa.pubの内容をコピーします。
.sshディレクトリやauthorized_keysがない時は、
server$ cd
server$ mkdir .ssh
server$ chmod 700 .ssh
server$ touch .ssh/authorized_keys
server$ chmod 600 .ssh/authorized_keys
# 他のユーザーが中身を見られないようにちゃんとchmodしておく。
これでクライアント側から
client$ ssh -i ~/.ssh/id_rsa user@serverAddress 
なんてやるとパスワード入力無しでログインできます。
ただし、秘密鍵がパスフレーズ無しなので、id_rsaを持っているひとはS上でやりたい放題になってしまい危険です。

2: 鍵認証でログインしたユーザーが好きなコマンドを打てないようにする。
これは、Sの~/.ssh/authorized_keys にオプションを書くことにより行います。
authorized_keysというファイルは、かなり高機能なオプション設定ができまして、このファイルをいじるだけで、「使用される公開鍵ごとに」接続ホストを限定できたり、対話コンソール禁止にしたり、ポートフォワーディングを禁止にしたりいろいろできます。
接続ホストを限定すれば、だいぶ安心なのですが、それだと誰かが勝手にCのマシンを使った時にパスワード無しでSに侵入できるので、今回は、commandオプションを使います。
commandオプションを設定すると、sshで接続してきたら特定のコマンド(サーバー側で設定)だけを実行して接続を切るようになります。sshコマンドで実行コマンドが指定されていても無視します。(参照:sshdのman)
オプションを書く場所は、authorized_keysの先ほどの公開鍵をコピーした行の先頭で、例えば
command="ls -al" ssh-rsa AAABBBCCC...
# ssh-rsa以降が公開鍵部分
としておくと、クライアント側から
client$ ssh -i ~/.ssh/id_rsa user@serverAddress 
なんてやると、ログイン先のホームディレクトリの内容がずらずらと出て、すぐにSからログアウトされます。
これで、誰かが秘密鍵を使ってログインしても好きなことが出来なくなります。
しかし、この状態だと自分もcommandで指定したコマンドしか実行できないし、コマンドに可変で引数とか渡せないので不便です。

3: sshの機能でサーバーに環境変数を渡す。
sshの機能でCからSに環境変数を渡すことができます。(ここのページをヒントにしました。)
まず、S側の/etc/ssh/sshd_config を下のようにいじります。
# 環境変数の変更を許可する設定
PermitUserEnvironment yes
# クライアントから値を受け取る環境変数の指定
# SSH_ARGは自分でテキトーに決めた環境変数名
AcceptEnv SSH_ARG
PermitUserEnvironmentはyes/noなので、値を上書きします。
AccveptEnvは、上書きでなく追加してください。追加した環境変数がクライアントから変更可能になります。
なお、sshd_configを変更したらsshdの再起動が必要です。
これで今度は、authorized_keysのcommandを、例えば
command="echo SSH_ARG=$SSH_ARG" ssh-rsa AAABBBCCC...
# ssh-rsa以降が公開鍵部分
としておくと、クライアント側で
client$ env SSH_ARG=AHO ssh -i ~/.ssh/id_rsa -oSendEnv="SSH_ARG" \
     user@serverAddress  // ここまでコマンド
SSH_ARG=AHO  // ← これが表示結果
client$ 
となり、めでたく環境変数が渡せました。もちろん複数の環境変数も渡せます。
ここで、例のechoの代わりに自分で書いたscript等を使えば、CからSを自由にコントロールでき、また、意図しないコマンドの実行を抑えることが出来ます。

2014年1月29日水曜日

L2TP over IPsec (UDP4500) のポート開放が効かなくて困った。解決メモ。

ローカルネットワーク内部に、SoftEther等のL2TP over IPsecを使用するVPNサーバーを置いて、iPhoneやmacやAndroidからVPN接続をしようとしていたのだが、どうもうまくいかなかった。

ルーターにポートフォーディングの設定を正しくして、ルーターを再起動すると「ちゃんと外部からVPN接続できる。」のだが、しばらくするとL2TP over IPsecのポートフォーディングが動かなくなる。
他のポートのポートフォーディングは、ちゃんと動いていて、ダメになるのはL2TP over IPsecのポートだけ。

ルーターを再起動すると復活するが、1日から1週間位運用していると、またダメになる。いつダメになるかは読めない。

という変な状況が続いていた。ルーターを再起動すると直るので、当初ルーターを疑ったのだが、真の原因が判明したので、メモっておく。

原因:ローカルネットワーク内部に存在するMacBookの「どこでもMy Mac」機能がUPnPを使って、ルーターのUDP4500を奪っていたので、VPNサーバーにUDP4500が転送されていなかった。

対処:ルーターのUPnP機能をOFFにした。

今まで知らなかったのだが、UPnPというのは、ルーターのポートフォワードテーブルを勝手に書き換える(詳しくはここ)という恐ろしいやつで、うちで使っているルーター(PR-S300SE)では、手動で設定したポートフォワードテーブルよりも優先度が高いため、ポートが奪われてしまっていたようだ。

ルーター再起動でVPNサーバーにつながるようになっていたのは、再起動でルーターのUPnPテーブルがクリアされるからだった。

PR-S300SEに限らず、UPnPがデフォルトでONになっているルーターはあるようなので、似たような症状の出ている人はチェックするといいかもしれません。

2013年12月10日火曜日

CentOS6.2にgcc4.8.2を入れた時のメモ

CentOS6.2のgcc4.7.2が入っている環境に、gcc4.8.2を入れた時、最後のgccのmakeではまったので記録。

まず、gcc4.8のコンパイルについては超親切で丁寧なページがあるので、それを参考に進めるのだが、最後のgccのmakeで少しはまったので、解決した時のconfigureオプションを残しておきます。

./configure --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --with-ppl=/usr/local --with-cloog=/usr/local --program-suffix=-4.8 --enable-languages=c,c++ --disable-multilib

gccをc/c++しか使わない人用です。
なぜか、各コンポーネントを見つけてこないことがあるので全部ディレクトリ指定しました。
あと、64bit環境しかいらないので、--disable-multilib を指定しています。

2013年11月21日木曜日

[linux] mozcで、かな入力。入力できない文字への対処。

mozcのかな入力で、はまった。

実際は、mozcの問題というよりもキーボード設定の問題だと思うんだけど、入力できない文字があって困った。
例えば、自分の場合、macbookからvncを通して、Ubuntu12.04のmozcでかな入力しようとするとどうしても小さい「ゃ」が打てなくて大きい「や」になってしまう。「ゅ」「ょ」はOKなのにである。
ちなみにシングルクォーテーションはちゃんと入力できる。

{むむぅ。随分、微妙な症状だなぁ・・・}
もちろん、ぐぐっても微妙すぎて解決法どころか同じ症状すら出てこない。

キーボードの設定を調べたが、すぐにわからなかったのと、
 ・ ディストリとかが違うとどうせ設定も違う。
 ・ vncを通すので問題がややこしい。
 ・ macからもwindowsからも操作したりするのでややこしい。
ので、
{追いかけるのも面倒だぞ、これは。}
と思い、頭に来たので、禁断の
ローマ字テーブル「かな」化作戦!!
を決行することにした。ダメ作戦と思いきや、意外に快適になったので、ローマ字テーブルをmozc設定画面からexportしたファイルをリンクしておきます。
そのままmozc設定画面からimportして使用できます。

使用時に注意するところは、
・ aを叩くと「ち」ではなく「a」と表示されるが変換するとちゃんと「ち」で変換できるので気にしないこと。(他のキーも同様)
・ 「0」のshiftは登録できないので、「を」を出すのは「ほ」のshiftになっている。
・ 自分の環境だと漢字入力モードでも、¥キーだけ押すと直接¥になってしまったので、「ー」は、shift+¥になっている。
・ 「」をshiftなし、『』をshift付きで出したいのだが「む」とバッティングするので、「」とセットで打ち込んだ時に「」が表示されるようになっている。
くらいかなー。

これを元に、好きにカスタマイズするといいかもしれません。

この方法で結構良かったのは、キーボードの微妙なカスタマイズが、ローマ字変換テーブルの調整でできちゃうところで、自分の環境にあわせて作れます。
また、ローマ字変換テーブルには、かなり複雑な入力パターンも登録できるので、IMEのカスタマイズとしても変な使い方が出来そうです。

2013年7月18日木曜日

mac版 gnucash日本語入力への道 (gtkimcocoa使用)

この記事の情報は古くなっています。
2013/7当時は、普通にダウンロードしたgnucashでは、日本語入力できませんでしたが、2014/12現在の版(Ver. 2.6.5)では、何も考えずに普通に日本語入力できました。
(OSX Yosemite 10.10.1使用。OSX標準とgoogleの日本語入力で確認。)

最近macを使いだしたので、gnucashをmacにも入れて、どのマシンからでもgnucashからdropboxに置いたデータを更新できたら便利だなと思って、公式のmac用バイナリをインストールしてみた。

で、レシートそろえて「いざ入力!」と勇んでみたが、なんと日本語の入力が出来ない。
{まじすかーーっ!?}

いろいろ調べてみると、

だ、そうだ。おいおい。

そんな状況なのだが、gtk+にパッチを当てて、日本語入力できるようにした人もいるらしい
それをやってみようとも思ったが、後でgtk+のバージョンが上がったときに、もしパッチが当てられなくなったら手も足も出なくなりそうなのでパッチは嫌だなーと二の足を踏んでいたら、gtk+にパッチを当てなくても、偉い人がgtkimcocoaというgtk+のアドイン?を作っていて、これを使うと日本語入力できるらしいことを発見。

それを利用して、なんとか日本語入力できるところまで行ったので、後でもう一回出来るように記録を残します。

ただ、かなりややこしかったので、このページに検索で迷い込んできた人は、以下の俺のスペックを参考にやってみるか決めてください。
・ macを使い始めたばかりで、mac特有の仕組み等は全然わからない。
・ GTK+の仕組みについては全く知らない。
・ もちろん、GTK+の日本語入力の仕組みも知らない。
・ ソースをダウンロードしてビルドしてインストールとかは、変なオプションを駆使したりしないケースならできる。(./configure; make; make install; 位で勘弁してくれるeasyなケースね)
・ configureやmakeの途中でエラーで止まったりしたときは、エラーを見て足らないファイルをどこかから探して持ってくる位は出来ることが多い。
・ configureでエラーが出た時に、configure.acとかconfigure.inをいじってみたりすると、失敗することの方が多い。← configureについてちゃんと理解してない。

スペックを見て、こいつに出来るなら大丈夫そうだな等の参考にしてください。
ただ、なんのことやらわからない人は、手を出さない方がいいでしょう。

以下、やった作業をいろいろ書いていきますが、無駄な試行も含めてかなりいろいろやったので、全部は書ききれませんでした。なんとなくな書き方ですみません。(←性格の問題だろ)
また、自分がやった手順なので、無駄な手順も含まれていると思います。

大まかな順序は、
 gtk+のビルド・インストール →
 gtkimcocoaのビルド・インストール →
 gtk-demoで日本語入力確認 →
 gnucashのビルド・インストール →
 gnucash環境下へのgtkimcocoaのビルド・インストール →
 gnucash環境下のgtk-demoで日本語入力確認 →
 gnucashで日本語入力確認

注意点: 現時点のgnucashは、ver.2.5.3(Unstable)で、Gtk+-2.24 を使っていますが、今後GTL+3系に移行する予定があるようです。その場合、そのあたりの手順が変更になります。

なお、当方のOSバージョンは、OS X 10.8.4 です。日本語入力には「ことえり」を使用しています。

◎ GTK+のビルド・インストール
GTK+のインストール前にやってだめだったこと。
brew install gtk+
homebrewで、インストールしたgtk+だと、GTK+日本語入力モジュールのgtkimcocoaのコンパイルがうまくいかず挫折した。

いきなり{jhbuildってなんじゃ}とつまづくが、GTK+そのものやGTK+を使用したアプリをbuildする環境らしい。
ホームディレクトリで作業した。
$ curl -s -O https://git.gnome.org/browse/gtk-osx/plain/gtk-osx-build-setup.sh
$ sh gtk-osx-build-setup.sh  ← これでjhbuildがインストールされる
$ ~/.local/bin/jhbuild bootstrap
$ ~/.local/bin/jhbuild build meta-gtk-osx-bootstrap
$ ~/.local/bin/jhbuild build meta-gtk-osx-core

☆出会ったトラブルと対処
・ libffiのインストール時に、必要なダウンロードサイトがダウン(?)していてエラーで止まったが、エラー後のメニューで[4]を選択しjhbuildのシェルに入って、失敗したcurlコマンドのURLをググって他のサイトに変更しダウンロードする。ダウンロード後、そのshellでexitすると、先ほどのエラーメニューに戻るので[1]を選択すると次のステージに進む。
・ gettextのインストール(たぶん)で、autopointコマンドのエラーで止まったが、[4]shellから
autopoint --force
で切り抜ける。参考URL:http://lists.sourceforge.jp/mailman/archives/scim-imengine-dev/2007-March.txt
またexit→[1] で続行。
・ どこかで、configureの無限ループに落ち入るが、いっぺんctrl+cで強制終了して、もう一度
$ ~/.local/bin/jhbuild build meta-gtk-osx-core
の実行でなぜか切り抜ける。

◎ gtkimcocoaのビルド・インストール
テキトウにgitのsrcを展開するフォルダを作ってcdで移動
$ git clone git://github.com/ashie/gtkimcocoa.git
$ cd gtkimcocoa
$ ~/.local/bin/jhbuild shell
$ ./autogen.sh
$ ./configure   ← メッセージの最後の方の GTK+2: yes を確認
$ make
$ make install
◎ gtkimcocoaの設定
$ gtk-query-immodules-2.0 > ~/gtk/inst/etc/gtk-2.0/gtk.immodules
$ gtk-demo でデモ起動 OK
「Text Widget」→「Hypertext」を開いても日本語入力できた。

gtkimcocoaが正しくインストールされていると、バイナリ配布のGTK+使用アプリでも日本語入力可になるはずらしいのだが、この時点でバイナリ配布のgnucashを動かしても日本語入力がされなかった。

バイナリ配布のgnucashが32bitコンパイルされているのが原因かもしれない。ここで、GTK+を32bitでコンパイルして試すか、gnucashを64bitでコンパイルするかの選択を迫られるが、前者の方が大変そうな予感がするので、gnucashのコンパイルに賭けることにした。

◎ gnucash-unstableのビルド・インストール
$ ホームディレクトリで作業した。
$ ホームディレクトリにある .jhbuildrc-custom をバックアップを取った後
https://raw.github.com/jralls/gnucash-on-osx/master/.jhbuildrc-custom を参考に編集
$ ~/.local/bin/jhbuild bootstrap
$ ~/.local/bin/jhbuild build
編集した.jhbuildrc-customを参考に置いておきます。(unstableのgnucash用です。)

☆出会ったトラブルと対処
・ 何度も
AM_CONFIG_HEADER を使うな AC_CONFIG_HEADER を使え!というエラーに遭遇して止まるので、その度に[4]shellからconfigure.acまたはconfigure.inのAM_CONFIG_HEADERをAC_CONFIG_HEADERに変更する。
・ gmpのconfigureで、OS or マシンのarchitecture の認識がうまくいかなくて止まる。オプションでarchitectureを指定してもconfigureは通るがmakeで止まるので、gmpのコンパイルをあきらめる。
gmpは、brew install gmp でインストールしてskip連打で次に進んだ。
本来ここで入るgmpとバージョンも結構違うのでどうかと思ったが、後でこれが問題になることはなく最後まで行った。
・ どこかで、configureの無限ループに落ち入るが、いっぺんctrl+cで強制終了して、もう一度
$ ~/.local/bin/jhbuild build
の実行でなぜか切り抜ける。
・ ビルド中に何度かエラーで止まって冷や汗をかくが、なぜかいっぺんctrl+cで強制終了して、また
$ ~/.local/bin/jhbuild build
の再実行で、止まらずに次に行けるという現象と数回遭遇する。

◎ gnucashの環境でもgtkimcocoaをインストール
上でgtkimcocoaをインストールしたときと同じフォルダに移動
$ ~/.local/bin/jhbuild shell
$ ./autogen.sh
$ ./configure  ← メッセージの最後の方の GTK+2: yes を確認
$ make
$ make install ← 今度はgnucash-unstableのフォルダの奥にインストールされる
◎ gnucashの環境でgtkimcocoaの設定
$ gtk-query-immodules-2.0 > ~/gnucash-unstable/etc/gtk-2.0/gtk.immodules
$ ~/gnucash-unstable/bin/gtk-demo でデモ起動 OK
「Text Widget」→「Hypertext」を開いても日本語入力できた。

◎ GnuCashで日本語入力確認
$ ~/gnucash-unstable/bin/gnucash-launcher &
でgnucash起動。
日本語入力できることを確認した。

うへー、結構長い道のりだった。
証拠写真は、これ。

ただし、まだ日本語入力周りが原因で落ちることがあるようですので、こまめに記録を取った方がいいでしょう。

2012年4月26日木曜日

[windows]ファイル共有を別ユーザーでログインする方法。(ネットワークフォルダの切断について)


追記 2016-06-22: この記事よりもスマートな方法がこちらのブログで紹介されています。当ブログの方法はややこしいので、先に前記ブログの方法で試してみることをお勧めします。


windowsマシンから、エクスプローラーを使ってファイルサーバーのネットワークフォルダにアクセスしていて、同サーバーの権限が違う別フォルダに接続したいことがよくある。
こういう時は、別ユーザーで接続しないといけないので、一度切断した後、別ユーザーでログインしようと思ったのだが、切断の仕方がさっぱりわからず、ぐぐってもなかなかわからず苦労した。解決したので、方法をメモっときます。

先に、短めに結論を書くと、
○ ネットワークフォルダの切断
できない。(方法が見つからなかった)
○ 解決方法
切断せずに別ユーザーで接続する。やり方は、hostsファイルいじって、ファイルサーバーに別名つけた後に、エクスプローラーで\\別名 でアクセスすると、ユーザー・パスワードを聞いてきてくれるので、好きなユーザーでログインする。

以下、ぐだぐだと詳細記事です。

1、問題
 NASやlinuxのsamba共有のファイルサーバーを使っていて、フォルダによって権限が違うことがよくある。そんなサーバーに、windowsからエクスプローラーで接続していて、一度あるフォルダにネットワーク接続するとそのサーバーにはずっと最初にログインしたユーザーでの接続になってしまい、別権限のフォルダに接続できなくて困っていた。
 仕方ないので、一度windowsをログアウトしたり再起動したりしていたので、とても不便だった。

2、切断しようてしてみた
 接続を行ったん切ろうとして、共有フォルダを右クリックしてみたが切断できそうなメニューは存在しない。(windows7の場合)
 で、初めの接続を切ろうとして調べて行き当たったのが、net コマンドを使う方法だったのだが、うまくいかない。具体的には、
$ net use \\server\folder /delete
ネットワーク接続が見つかりませんでした。

NET HELPMSG 2250 と入力すると、より詳しい説明が得られます。
こんなエラーが出てしまうが、指示に従っても詳しい説明など全く得られない。
「なんじゃそりゃ」
また、
$ net use * /delete
$ net use \\server\IPC$ /delete
$ net use \\server /delete
とかやけくそでいろいろやってみたが、全部同じエラー。
「くそっ」
調べてみるとどうやら、windows2000以降では、エクスプローラーで接続したネットワークフォルダは net コマンドでは切断できないようだ。(参考:net use ○○○○ /delete でリソースが切断できない)

3、切断せずに、別ユーザーでログインする
 なんやかんやで時間食った後に見つけたのが、切断せずに別ユーザーでログインする方法(参考:同一サーバの複数の共有ディレクトリに別IDで接続する(Windows 7))
 windowsフォルダの奥深く(自分の場合 c:\windows\system32\drivers\etc\hosts)にhostsというファイルがあって、特定のip addressに別名をつけることができます。
 例えば、hostsに
192.168.0.11 server1
なんて行を追加しておくと、エクスプローラーでもブラウザでも他のコマンドでもserver1と指定すると192.168.0.11へアクセスしてくれるわけです。
で、今回の問題を解決するにあたって、仮にファイルサーバーのアドレスが192.168.0.11だった場合、↑のようにhostsファイルを変更すると、エクスプローラーで \\server1 と接続するとなんと、既に192.168.0.11で別のネットワークフォルダを開いていたとしても、エクスプローラーは別のマシンへの接続だと思ってユーザーとパスワードを聞いてきてくれます。ばんざい。
ここで、自分の好きなユーザーでログインすれば解決です。
ただし、hostsファイルはシステムファイルなのでメモ帳等のエディタを「管理者として実行」しないと変更できませんので、注意してください。
また、別名に存在するマシン名を使うとやっかいなことになるので、かぶらない名前を選んでください。

4、反省
今回手間取った敗因は、既存の接続を切断しないといけないと思って、そっち系の言葉で検索し続けたところです。まさか、切断せずに接続を増やすとも思いもよりませんでした。

2012年4月13日金曜日

Explorer Touch mouse を買ったらすっごく良い感じだった。

家で使用しているマウスのホイール部分が壊れてしまった。
このところ、ホイールを回しても1/10位しか反応しないので、ブラウザでちょっと上に戻るだけでも気合でぐるぐるぐるぐるぐると回さないといけないのでいらいらしていてた。
「普通にスクロールバーつまんで動かせよ」
という意見もあるが、不器用なので間違ってスクロールバーの外側の別アプリのウィンドウを叩いてしまったりして、ブラウザが隠れて余計に
「むきーっ」
となったりする。で、買い替えなのだが、いつも先に壊れるのはメカ部分なので、ホイールの代わりにタッチパッドがくっついてるようなの今時だからあるだろうと思って探してみたらあった。

← これ
マイクロソフト Explorer Touch mouse。見ての通りホイールがない。そのあたりの平らな部分をスマホのスクロールみたいに指をすべらせるとスクロールしてくれる。

こいつが意外に賢くて、普段、指をパッドエリアに置いておいても指が少し動いたくらいでは反応しない。
でもって、ちゃんとスマホみたいに指を速く動かすとたくさんスクロールしてくれる。

さらに凄いのが、パッド上の指の動きをマウスが検出するとマウス内部でバイブが
「カタッ」
とふるえるので反応がわかりやすい。そんでもって、指を
「えいっ!!!」
と気合で速く動かすと、中のバイブが
「カタカタカタカタカタカタカタカタカタカタッ」
と景気よく震えるので、様子がよく分かる。で、そのカタカタも後半だんだん減速していくので、
「そろそろ止まりそうだなっ」
というのがわかるし、カタカタ鳴っている時にそっと指をパッドに乗せると途中で止められて非常にコントロールしやすい。慣れてくるともうホイールよりも使いやすい。

ただ、ちょっと使いにくいのが、追加ボタンの場所。よく横の部分に付いている。「戻る」「進む」みたいなボタンがなく、その替わりにスライドパッドがボタンになっていて、その押す場所によって機能が変わる。
←のように1、2、3 のどこを押すかで違う動きになり、それぞれの動きを設定で変えられるようになっている。

マウスを持つフォームで違うと思うが、自分の場合、2の部分は押しやすいのだが、1は押しにくく、3はもっと押しにくい。

マウスの動きの反応は良い。以前使っていたマウスはLogitecのレーザーマウスだったのだが、マウスを動かしている白い板のテーブル上だと全然反応しなかった。 でも、こいつ(青色LEDらしい)だとマウスパッドなしで全く問題なく反応するので◎。

ワイヤレスだからもちろん電池がいるのだが、単3電池が使えるのがよい。もっとサイズの大きいマウスでも単4電池を使ってるのも結構あるが寿命は短くなってしまうし、単3だとうちの場合、在庫がごろごろしているので更に都合がよかった。

てわけで、今回かなり満足で興奮気味なので、記事アップしてみました。

2012年3月6日火曜日

さらに Mail Checker Minus 開発終了で Checker Plus for Gmail に移行

ついこの間、Mail Checker Minusを紹介したばかりなのだが、いきなり開発終了?!

- This project is no longer maintained, please check out Jason Savard's "Checker Plus for Gmail™"

ときたもんだ。まじかよ。
もうちょっと頑張れよ。せっかく始めたんだから・・・

というわけで、完全にExtensionジプシー状態なのだが、めげずに指示通り「Checker Plus for Gmail™」に行ってみる。

うんうん、作者顔出しで熱いメッセージをyoutubeから送ってくれているから、簡単に「やーめた」しなさそうだと信じたい。
使ってみると機能もいろいろあって動作も快適。普段使いできそうだ。

ただ、「spamを報告」のボタンが押し間違いそうな位置にある。このボタンは、作者にいくらでもいいので寄付をすると非表示できるようだ。よくできているから、しばらく使ってみて問題無かったら寄付してみよう。


2012年1月4日水曜日

Mail Checker Plus for Google Mail が開発終了でMail Checker Minusになっていた。


追記
この記事のMail Checker Plus for Google Mailも開発終了とのことです。記事アップしました。


自分は、ほとんどのメールをChromeの超便利な拡張機能「Mail Checker Plus for Google Mail」で読んでいる。
こいつは、Gmailのサイトを開かずにメールの読み書きができて気に入っていたのだが、最近フリーズしたり、データ更新が不安定だったりするので困っていた。

調べてみたら、ほぼ同じ機能の「Mail Checker Minus」があるらしい。
サイトによると、

-- This is a fork of the "Mail Checker Plus for Google Mail" extension

ってあるから、ソースごとに受け継がれていたようだ。前のは開発終了っぽい。
でも、発展形なのになぜかMinusだから入れる前に躊躇する人いそうだなあ。

入れ替えたら、調子が悪かったのがすっかり良くなった。

2011年7月26日火曜日

Google Maps JavaScript API V3で、2点間の距離を取る方法


Google Maps JavaScript API V3 をいじっていて、2点間の距離が取りたくなった。ルート計算ではない。
{こんなもん簡単だろ}
と思って、マニュアルページに行ってみたが、それっぽいものが全然見つからない。
ちょっと調べてみるとV2の時はGLatLngクラスに、距離計算メソッドあったらしいが、V3のLatLngクラスには、そんなものありゃしない。くそー。でも、
{ないわけないだろ}
と真面目に調べたらあったのでメモっときます。

Google Maps JavaScript API V3には、追加のライブラリがあって2点間の距離を取るには、Geometry Libraryなるものが必要。
でこいつを使うには、通常
  <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
のようにGoogleのAPIをリンクしているところで
  <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false"></script>
こうやって、使用ライブラリを指定してやらねばならない。
参考:
 ・ 追加ライブラリの使い方
 ・ Geometry Libraryの使い方

あとは、
var distance = google.maps.geometry.spherical.computeDistanceBetween(posA, posB);
で一発。posA, posBはLatLngのインスタンスです。