[メモ] らずぱいで、Bluetoothキーボードのエミュレーション

## 概要
-  らずぱいのBluetoothを使って、BTキーボードに化け(エミュレーション)、ラズパイに挿したUSBキーボードから、タイプする<br>という記事をためしたメモ。
![らずぱいでBluetoothキーボードのエミュレーション](https://qiita-image-store.s3.amazonaws.com/0/75594/6b29d5b3-c02b-f27f-ba20-45cbd225cfeb.jpeg)
<br><br>

- **元記事**
    - [ Emulating a Bluetooth Keyboard with a Raspberry Pi and Python (Raspbian Jessie/Bluez 5 version)
](https://yetanotherpointlesstechblog.blogspot.com/2016/04/emulating-bluetooth-keyboard-with.html)
<br>↑は、↓を参考にして、最近の環境に対応させたものらしい。
    - [Emulate a Bluetooth keyboard with the Raspberry Pi](https://www.gadgetdaily.xyz/emulate-a-bluetooth-keyboard-with-the-raspberry-pi/) - Learn how to relay the input from a USB keyboard to a Bluetooth-capable device using the Raspberry Pi
<br><br>
- BLEではないっぽい?(スマホから検出できなかった)
- 実装されたコードは、まったく見ていない。。手順を追ったのみ。
- (関連) [BLEnanoとRaspberry Piで、USBキーボードをBluetooth対応... <del>への道</del>](http://qiita.com/mt08/items/9aec28321d5819229e94)


## 環境
- Raspberry Pi: Zero W と 3 Model B で確認
    - Raspbian: `2017-03-02-raspbian-jessie-lite.img`
    - USBキーボード - らずぱいに接続
- Windows 7 64ビット: sshにて、らずぱいにログインして、設定した。あと、BTの接続テスト


## 手順
1. Raspbian起動させる
    - microSDに、Raspbianイメージ焼く
    - 必要あれば、
        - `ssh`(空ファイル) と `wpa_supplicant.conf`(あれば)をFATパーティションに
        - `sudo apt-get update && sudo apt-get upgrade`

2. 必要なパッケージ類のインストール
    - とりあえず、

        ```bash:とりあえず
sudo apt-get install -y htop byobu git-core python-dbus python-gtk2
```
    - Bluetooth関連

        ```bash:Bluetooth関連
sudo apt-get install -y python-gobject bluez bluez-tools bluez-firmware python-bluez python-dev python-pip
sudo pip install evdev
```

3. byobu起動
    - `byobu` [Enter] で起動
    - Ctrl+aする => `1` \[Enter\] (初回時のみ)
4. Bluetooth Daemon Configuration

	```bash:こぴぺ
	# Stop the background process
	sudo /etc/init.d/bluetooth stop

	# Open a dedicated terminal and tun the bluetooth daemon in the foreground
	sudo /usr/sbin/bluetoothd --nodetach --debug -p time
	```
5. Ctrl+a (離して) c

6. Emulator Sever

	```bash
	# Download the code
	cd ${HOME}
	git clone https://github.com/yaptb/BlogCode.git

	# Configure DBUS
	cd BlogCode/btkeyboard/dbus
	sudo cp org.yaptb.btkbservice.conf /etc/dbus-1/system.d/

	#hciconfig
	sudo hciconfig hci0
	sudo hciconfig hci0 up
	sudo hciconfig hci0
	```
ここで表示された、BD Addressを控えておく。
=> 例)BD Address: `B8:27:EB:31:41:59`  ACL MTU: 1021:8  SCO MTU: 64:1

	```bash:btk_server.pyを編集
	#Edit the Emulator Server Code
	cd ${HOME}
	cd BlogCode/btkeyboard/server
	#
	vi btk_server.py
	```
	=> MY_ADDRESSに先ほどのBD ADDRESS、MY_DEV_NAMEに適当な名前を入れる。
	MY_ADDRESS="B8:27:EB:31:41:59"
	MY_DEV_NAME="RPiZeroW_BTKb"

	```bash:EmulatorServer起動
	# Run Emulator Server
	cd ${HOME}
	cd BlogCode/btkeyboard/server
	sudo python btk_server.py
	```
	```shell-session:(実行例)
	pi@raspberrypi:~/BlogCode/btkeyboard/server$ sudo python btk_server.py
	/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
	  warnings.warn(str(e), _gtk.Warning)
	Setting up service
	Setting up BT device
	Configuring for name RPiZeroW_BTKb
	Configuring Bluez Profile
	Reading service record
	Profile registered
	Waiting for connections
	```

7. Ctrl+a (離して) c
8. Pairing
	- `sudo /usr/bin/bluetoothctl` を実行して、↓をこぴぺ。

	```bash:こぴぺ
	agent on
	default-agent
	scan on
	discoverable on
	```
	- WindowsのBluetoothのアイコンを右クリック、デバイス追加。<br>
![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/f8613add-83fb-edd3-85e9-1f14090d6b5f.png) ![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/e0c4a8a6-b47a-821e-758d-f48029dda8de.png) ![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/52cf1890-5601-0aab-3fb4-4e7958b65d67.png)
	- 数字見たいのが出てきたら、らずぱい側に、`[agent] Confirm passkey 117747 (yes/no):`のが表示される。そしたら、`yes`[Enter]して、Windowsのダイアログでも、[Next]を押す。=> ドライバ類がインストールされるので、待つ。

9. Ctrl+a (離して) c
10. Local Keyboard Mirroring 
	- USBキーボードをらずぱいに挿して、以下、こぴぺ。

	```
	cd
	cd BlogCode/btkeyboard/keyboard
	sudo python kb_client.py
	```

	```shell-session:実行例
	pi@raspberrypi:~/BlogCode/btkeyboard/keyboard$ sudo python kb_client.py
	Setting up keyboard
	setting up DBus Client
	waiting for keyboard
	found a keyboard
	starting event loop
	```
=> らずぱいに刺さったUSBキーボードで、操作が行えるハズ。

## その他
- 電源を入れなおしたときは、こんな感じ??

	```bash
	# byobu起動
	byobu


	# Stop the background process
	sudo /etc/init.d/bluetooth stop

	# Open a dedicated terminal and tun the bluetooth daemon in the foreground
	sudo /usr/sbin/bluetoothd --nodetach --debug -p time


	######## Ctrl+a  c ########

	sudo hciconfig hcio up
	sudo hciconfig hcio


	cd ${HOME}
	cd BlogCode/btkeyboard/server
	sudo python btk_server.py

	######## Ctrl+a  c ########

	sudo /usr/bin/bluetoothctl

	agent on
	default-agent
	scan on
	discoverable on


	######## Ctrl+a  c ########

	cd 
	cd BlogCode/btkeyboard/keyboard
	sudo python kb_client.py
	```