2016年6月27日月曜日

USBデバイスのアクセス権限を付与する

Ubuntuでプログラムを書いて忘れがちなこと,USBデバイスへのアクセス権限の付与です.

以下をターミナルで実行するだけです.

$ sudo gpasswd -a ユーザ名 dialout

ubuntuのホームディレクトリを英語化

以下をコンソールで入力して
$ LANG=C xdg-user-dirs-gtk-update

表示された窓を確認して変更をクリック

2016年6月26日日曜日

ubuntu14.04@GYGABITE BRIXのwirelessカードが認識されない

GYGABITE BRIXという手のひらサイズのPCを使っているのですが,ubuntu14.04をインストールしたところwirelessカードを認識してくれない.日本語で調べたところカーネルを新しくすればいいという情報が出てきたのだけれどもう少し調べたらもっと簡単に解決できるようだ.
http://askubuntu.com/questions/672700/how-can-i-install-intel-dual-band-wireless-ac-3165-drivers

以下のファイルがあるか確認する
iwlwifi-7265D-13.ucode
iwlwifi-7265-13.ucode

$ ls /lib/firmware | grep 7265

あればそれを複製して改名
$ cd /lib/firmware
$ sudo cp iwlwifi-7265D-13.ucode iwlwifi-3165-9.ucode
$ sudo cp iwlwifi-7265-13.ucode iwlwifi-3165-13.ucode

そして再起動する.

これでちゃんとwirelessカードを認識してくれるようになりました.

sshのホストの記録を削除する

ubuntuにsshしようとしたら

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

が表示されて接続を拒否された.何故かというと,同じ筐体に同じIPアドレスを割り振っているものの,OSを再インストールしたからだ.どうやらクライアント側(sshを打つ側)がホストの情報を記録していて,いざ接続しようとしたら情報が違う,接続してはいけない,と判断するからのようだ.

ということでクライアント側に保存されたホスト情報を削除しましょう.

$ ssh-keygen -R ???.???.*.*
IPアドレス:???.???.*.*

これで改めて
$ ssh username@???.???.*.*

Are you sure you want to continue connecting (yes/no)?
YES!!!

晴れてsshすることができました.

そういえばOSを久々に入れ直してssh接続しようとしてrefuseされて,ホストサーバーを入れなければいけないことを思い出しました.
$ sudo apt-get install openssh-server

2016年2月8日月曜日

C言語でログ出力用ファイルのファイル名を自動的に更新する

C言語でログファイルを書き出す時にファイル名を自動更新するプログラム.例えばlog1.txt,log2.txt,…,logn.txtという感じで.概略を述べるとファイル名を設定し,ディレクトリを開いて同じ名前があれば数字を++して同じ名前がなければファイルを開くという流れです.

printf("\nOpen Log File\n");
FILE *fp;
char fname[512];
int n=0;
DIR *dir;
struct dirent *dp;
char dp1[512];
char path[512];
strcpy(path,".");

i=0;
while(i==0){
  if((dir=opendir(path))==NULL){
    perror("opendir");
    exit(1);
  }
  n+=1;
  //out put file name+++++++
  sprintf(fname,"log_%d.txt",n);
  for(dp=readdir(dir);dp!=NULL;dp=readdir(dir)){
    sprintf(dp1,"%s",dp->d_name);
    if(strcmp(dp1,fname)==0){//fname exists
      j=1;
    }
  }
  if(j!=1){
    i=1;
  }else{
    i=0;
  }
  j=0;
  closedir(dir);
}
if((fp=fopen(fname,"w"))==NULL){
  printf("%s\n",fname);
  perror("openfile");
  exit(1);
}
printf("\nOpened Log File\n");

2016年1月30日土曜日

gnuplotの参照データ数が多く重い場合にデータを間引く

gnuplotで参照するデータ数が多過ぎて,表示の処理が重い場合がある(行数が数万行のとき).サンプリング周波数に比べサンプルデータの周波数が十分に低い場合,データを間引いて構わないだろう.gnuplotでは指定数行ごとにプロットすることが可能である.


$ p [x1:x2][y1:y2] "./data.txt" u 1:2 ev 100 w l


「ev 100」は100行毎にデータを使用する,の意味.

2016年1月23日土曜日

起動時にプログラムを自動実行してみる

ubuntuの乗ったPCを制御器としてロボットを制御する.ディスプレイは使用しないので起動スイッチを押したら自動的にログインして自動的に目的のプログラムを実行する.

前にやったときはオートログインやオートスタートはlightdm.confやautostartに記述する必要があったが,今はUIがちゃんと用意されているみたいで.

オートログインは
システム設定 -> ユーザーアカウント -> 自動ログインタブをオン

オートスタートはここで自動起動で検索して

自動起動するアプリケーションで追加をし

コマンドの参照から自動実行したいシェルスクリプトのパスを選択し追加.

以上でubuntuを起動すれば自動でログインしてプログラムを自動で実行してくれる.簡単!

自動起動するアプリケーションの設定はターミナルから
$ gnome-session-properties
で起動することも可能.
登録した内容は
~/.config/autostart/*.desktop
を参照.