2014年4月3日木曜日

Windowsの共有フォルダにLinuxからアクセスする

Windows側 : Windows XP 32bit
Linux側 : Ubuntu 13.04 64bit

  1. Windowsに、あらかじめ共有フォルダを作っておく。(※1)
  2. WindowsマシンのIPアドレス(※2)とワークグループ名をメモしておく
  3. Linuxにsambaをインストール
  4. /etc/samba/smb.confをオープンし、以下の編集を行う
    workgroup = {Windowsのワークグループ名}
  5. Ubuntuで、「場所 > ネットワーク > サーバーへ接続」を選択し、以下のアドレスを入力
    smb://{WindwosのIPアドレス}
  6. 「Windowsネットワークフォルダ > Windowsマシン名 > 共有フォルダ」が見える筈

※1 共有ドキュメントは対象外らしい。
※2 ipconfigコマンドを使用

余談ではあるが、プラネックスコミュニケーションズのUSB無線LANアダプタは、サポート外ながらLinux用ドライバを提供している。素晴らしい。

2014年3月13日木曜日

Qtにおけるビルドファイルの出力先

Qtのmakeファイルの出力先は、プロジェクトモードにして、ビルドディレクトリ欄に記述する。
Debug/Releaseそれぞれについて指定する必要がある。
("ビルド構成を編集"のリストボックスで選択可能)


BBBでQtアプリの自動起動

目的

Qtを使用してBBB上でGUIアプリを動作させる。
GUIアプリではKeyPressEventを使用してキーボードの入力値を取得している
GUIアプリはBBBの電源投入で自動起動させる

環境

BeagleBoneBlack + AngStrom(3.8) + Qt(5.1)
# uname -a
Linux beaglebone 3.8.13 #1 SMP Wed Aug 14 16:25:00 CEST 2013 armv7l GNU/Linux

Qt Window Systemを使用する為、XServerを無効化しておく。

BOOT時にXServerを無効化してCUIモードで起動する
# systemctl disable gdm.service

XServerはsystemdで管理されているので、GUIモード中にCUIモードにしたい場合
# systemctl stop gdm.service

Xserverをまた立ち上げたい場合
# systemctl enable gdm.service

オートログイン化の為に、以下のサービスを編集している。
/etc/systemd/system/getty.target.wants/serial-getty@tty1.service
#ExecStart=-/sbin/agetty --noclear %I 38400 linux
ExecStart=-/sbin/agetty -a root %I 38400 linux

試行

【1】telnetでログインしてQt-GUIアプリを起動

・ウィンドウ生成 成功
・ログファイル出力 成功
・仮想キーボード・LCD4ボタン共に反応せず


【2】BOOT1時のsystemdによる自動起動

・ウィンドウ生成 成功
・ログファイル出力 成功
・仮想キーボード・LCD4ボタン共に反応せず
・init.dによる起動も試みたが同様

【3】USBキーボードを接続してログイン、Qt-GUIアプリを手動起動

・ウィンドウ生成 成功
・ログファイル出力 成功
 仮想キーボード・LCD4ボタン共に反応せず

考察

BBBに直ログインした場合、端末名はtty1。
telnetでログインした場合、端末名はttyO0。
systemdで自動起動した場合、端末名は"?"("ps ax"コマンドで確認)
tty1からアプリを起動しないとキーボードを取得出来ないらしい。
systemdによる起動は、ログインプロンプトに先駆けて行われるので端末と結び付けられていない。
なのでログイン後にアプリを自動起動する必要があるが、.bashrcや.bash_profileはAngstromでは機能しない。

対策

ログインプロンプトはsystemdによって管理されるサービスによって実行され、コマンドはagettyが使用される。
agettyは、ログインの方法に標準の"/bin/login"の代わりに独自のプログラムをroot権限で実行する"-l"オプションが存在する。
これを利用して、アプリの起動→終了後に/bin/loginを実行するスクリプトをagettyから読み出す。

/etc/systemd/system/getty.target.wants/serial-getty@tty1.service
[Service]
ExecStart=-/sbin/agetty -l /home/root/MyApp.sh -a root %I 38400 linux

/home/root/MyApp.sh
#!/bin/bash

/home/root/MyApp -qws
/bin/login root

参考文献

man of agetty
Linux起動の仕組みを理解しよう[rcスクリプト編]
Automatic login on Angstrom Linux
Systemd入門(1) - Unitの概念を理解する
自作プログラムをデーモンとして起動させる(by init.d)
systemdの*.serviceファイルの書き方

Create Startup Script in Angstrom
Automatic login on Angstrom Linux

BeagleBone Black(Angstrom)にSSHで入れるようにする

Qt4 自前のsignalの作り方
Qt Events

.bashrc と .bash_profile 結局どっちを使えばいい?

2014年3月10日月曜日

【Linux】他のユーザをログアウト

Telnet(ttyO1)からログインして、直接続(tty1)にログインしているユーザをキックする。

who
 01:16:23 up  1:16,  2 users,  load average: 0.10, 0.08, 0.05
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     ttyO0     00:06    7.00s  0.22s  0.04s w
root     tty1      00:07    1:08m  0.64s  0.57s ./ViEditView -qws

tty1が関わるプロセスを表示する

ps ax | grep tty1
  185 tty1     Ss     0:00 /bin/login --                 
  410 tty1     S      0:00 -sh
  411 tty1     S+     0:00 ./ViEditView -qws
  443 ttyO0    S+     0:00 grep tty1

ここで、tty1のログインに関わるプロセスIDは410。これにkillシグナルを送る

kill -9 410

再度whoコマンドを実行し、tty1ユーザがいなくなっている事を確認する

who
root     ttyO0        Jan  1 00:06

■参考文献
不要なユーザを強制ログアウトさせる
【 kill 】 プロセスおよびジョブを強制終了する
【 who 】 現在ログインしているユーザーを表示する

2014年2月23日日曜日

Update Ubuntu; 12.04(32bit) → 13.10(64bit)

13.10のインストールディスクを作り、12.04の領域にクリーンインストール。

~$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=13.10
DISTRIB_CODENAME=saucy
DISTRIB_DESCRIPTION="Ubuntu 13.10"
~$ uname -a
Linux xxxxxxx 3.11.0-17-generic #31-Ubuntu SMP Mon Feb 3 21:52:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

無事にバージョンが上がっている事を確認。
以下、気付いた事

・ブートローダ
12.04ではWindowsのブートローダでLinuxを選択するとgrubが起動して、そこからUbuntuを再度選ぶという二度手間だったが、13.10ではgrubが先に起動し、結果的に一発で起動するようになった。
Windowsのブートローダの方が融通が利かないがトラブル対策で先に起動していたが、当面はこれで良い事とする。

・日本語入力出来ない
12.04ではWindowsと同様に「半角/全角」でASCIIと日本語が切り替えらたが、13.10では反応しない。ツールバーのそれらしいアイコンをクリックして"Anthy"を選択すると出来るようになるが、Anthyは数年前に開発が終了しているらしいので使用したくない。

調べてみると、従来は「半角/全角」で文章入力方式を管理するIBusをON/OFFし、それでASCII・日本語を切り替えていたが、現在はIBusは常時ONに代わり、結果として「半角/全角」が機能していない。
代わりにIBusに入力ソース(英語、Anthyによる日本語、ATOKによる日本語、etc.)等を設定し、それを「ソースの切り替え」に登録したキー入力で切り替える必要がある。
試したところ、「ソースの切り替え」に「Zenkaku Hankaku」や「Super+Space」は登録出来るものの機能しない(SuperはいわゆるWindowsキー)。バグらしい。
入力ソースにはMozc(ibus-mozc)をインストールして「テキスト入力」ダイアログ左下の「+」アイコンから入力ソースに追加、、ソース切り替えは「Command+Space」で事無きを得た。
スクリーンショットの「日本語」は、"日本語キーボードのASCII入力"の事。「英語(US)」にすると英語圏のキーボード配列になる。
mozc単体で「全角/半角」によりASCIIと日本語を切り替えてくれるので、「Command+Space」を使うことは無さそうだ。

参考文献

日本語入力をラクにする Mozc
Ubuntu 13.10と日本語入力

2014年2月21日金曜日

BBBの電源を切るときは

POWERボタンを押すとシャットダウンシーケンスに入る。
電源ケーブルぶち切りは止めよう。

BBBのブートイメージを変更する

元ネタ

Beagleboard:Updating_The_Software

Beagleboard上のeMMCをflash

4GB以上のuSDカードが必要

イメージファイル""をダウンロード
BBB-eMMC-flasher-2013.09.04.img.xz

このファイルはeMMCをフラッシュする"eMMC flasher"であり、uSDカードからbootするものでは無い事に注意する事

現在のバージョンでは、uSDカードをOS起動中に外部ストレージに追加可能。

1) DLしたflash-image-fileを解凍
2) Win32DiskImager(for Windows)を使って解凍したflash-image-fileをuSDカードにコピー。
   Win32DiskImagerは以下からDL可能
   https://wiki.ubuntu.com/Win32DiskImager
3) コピーが完了したら、BBにuSDカードを挿入(※LANケーブル及びUSBデバイスは抜いておくこと)
4) S2ボタン(Boot Switch)を押し続けた状態でBBに電源を投入。
   S2ボタンはUSER-LEDのどれかが点滅するまで押し続ける
5) eMMCのflashが始まるとUSER-LEDが点滅を始める。全てのLEDが点灯したらflash完了
6) uSDカードを抜いて電源を切り、今度はS2ボタンを押さずに電源再投入。正常にBootする事を確認

uSDからBoot

uSDカードから直接Boot出来るイメージが定期的に提供される

※強制的にuSDカードからBootさせるには、eMMC上のFATパーテーションにある
 MLOファイルを削除する。
 ここには、BBをUSBケーブルでPCに接続し、thumbdriveとする事でアクセスできる。

4GB上のuSDカードが必要。

イメージファイルをダウンロード
Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.08.21.img.xz

Win32DiskImagerでuSDカードにコピー。

BBにカードを挿入し、そのまま電源を投入すればuSDからブートする

BBのeMMCをflashする際、uSDカードのフォーマットが不適当な為にトラブルになる場合があり、
これを避ける為に、DiskImagerを使用する前にHP Format Toolを使用する事を推奨

HP USB Disk Storage Format Tool Ver 2.18

FATもしくはFAT32でフォーマットを行う