Handy Tech Active Star 40 ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด ๋‚ด๋ถ€์˜ Raspberry Pi Zero

Handy Tech Active Star 40 ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด ๋‚ด๋ถ€์˜ Raspberry Pi Zero

์ €์ž๋Š” ์ƒˆ๋กœ์šด Handy Tech Active Star 40 ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด ๋‚ด๋ถ€์— Raspberry Pi Zero, Bluetooth ํœ˜ํŒŒ๋žŒ ๋ฐ ์ผ€์ด๋ธ”์„ ๋ฐฐ์น˜ํ–ˆ์œผ๋ฉฐ, ๋‚ด์žฅ๋œ USB ํฌํŠธ๊ฐ€ ์ „์›์„ ๊ณต๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ํ‚ค๋ณด๋“œ์™€ ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ์žฅ์ฐฉ๋˜๊ณ  Linux ์šด์˜ ์ฒด์ œ๋ฅผ ๊ฐ–์ถ˜ ARM ๊ธฐ๋ฐ˜์˜ ๋ชจ๋‹ˆํ„ฐ ์—†๋Š” ์ž๊ธ‰์ž์กฑ ์ปดํ“จํ„ฐ๊ฐ€ ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. USB๋ฅผ ํ†ตํ•ด ์ถฉ์ „/์ „์›์„ ๊ณต๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์กฐ ๋ฐฐํ„ฐ๋ฆฌ๋‚˜ ํƒœ์–‘๊ด‘ ์ถฉ์ „๊ธฐ์—์„œ. ๋”ฐ๋ผ์„œ ๊ทธ๋Š” ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ์ „๋ ฅ ์—†์ด๋„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฉฐ์น  ๋™์•ˆ์€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Handy Tech Active Star 40 ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด ๋‚ด๋ถ€์˜ Raspberry Pi Zero

์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด์˜ ์ฐจ์›์  ์ฐจ๋ณ„ํ™”

์šฐ์„ , ์„  ๊ธธ์ด๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. 60๊ฐœ ์ด์ƒ์˜ ์šฉ๋Ÿ‰์„ ๊ฐ€์ง„ ์žฅ์น˜๋Š” ๋ฐ์Šคํฌํ†ฑ ์ปดํ“จํ„ฐ๋กœ ์ž‘์—…ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๊ณ , 40๊ฐœ ์šฉ๋Ÿ‰์˜ ์žฅ์น˜๋Š” ๋…ธํŠธ๋ถ๊ณผ ํ•จ๊ป˜ ํœด๋Œ€ํ•˜๊ธฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์Šค๋งˆํŠธํฐ๊ณผ ํƒœ๋ธ”๋ฆฟ์— ์—ฐ๊ฒฐ๋œ ์ค„ ๊ธธ์ด๊ฐ€ 14์ž ๋˜๋Š” 18์ž์ธ ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณผ๊ฑฐ์—๋Š” ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด์˜ ๊ทœ๋ชจ๊ฐ€ ์ƒ๋‹นํžˆ ์ปธ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 40์„ ๋…ธํŠธ๋ถ์€ 13์ธ์น˜ ๋…ธํŠธ๋ถ๊ณผ ํฌ๊ธฐ์™€ ๋ฌด๊ฒŒ๊ฐ€ ๋น„์Šทํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ๋Š” ๊ฐ™์€ ์ˆ˜์˜ ์ง€์ธ๋“ค๊ณผ ํ•จ๊ป˜ ๋””์Šคํ”Œ๋ ˆ์ด ์œ„์— ๋…ธํŠธ๋ถ์„ ์˜ฌ๋ ค๋†“๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋…ธํŠธ๋ถ ์•ž์— ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ ์˜ฌ๋ ค๋†“์„ ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์†Œํ˜•ํ™”๋๋‹ค.

๋ฌผ๋ก  ์ด๊ฒƒ์€ ๋” ์ข‹์ง€๋งŒ ๋‘ ๊ฐœ์˜ ๋ณ„๋„ ์žฅ์น˜๋ฅผ ๋ฌด๋ฆŽ ์œ„์— ์˜ฌ๋ ค๋†“๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ทธ๋ฆฌ ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฑ…์ƒ์—์„œ ์ผํ•  ๋•Œ ๋ถˆ๋งŒ์€ ์—†์ง€๋งŒ ๋…ธํŠธ๋ถ์„ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋…ธํŠธ๋ถ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  ๊ทธ ์ด๋ฆ„์„ ์ •๋‹นํ™”ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ๊ฒƒ์€ ์†Œํ˜• 40์ž ๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ํ›จ์”ฌ ๋œ ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์–ตํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ €์ž๋Š” ์˜ค๋žซ๋™์•ˆ ๊ธฐ๋‹ค๋ ค์˜จ ํ•ธ๋””ํ…Œํฌ์Šคํƒ€ ์‹œ๋ฆฌ์ฆˆ์˜ ์‹ ๋ชจ๋ธ์ด ์ถœ์‹œ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ ธ๋‹ค. ์ง€๋‚œ 2002๋…„์—๋Š” ์ด์ „ ๋ชจ๋ธ์ธ ํ•ธ๋””ํ…Œํฌ ์ ์ž์Šคํƒ€40(Handy Tech Braille Star 40)์ด ์ถœ์‹œ๋๋Š”๋ฐ, ๋ณธ์ฒด ๋ฉด์ ์€ ๋…ธํŠธ๋ถ์„ ์˜ฌ๋ ค๋†“์„ ์ˆ˜ ์žˆ์„ ๋งŒํผ ๋„“๋‹ค. ๋งž์ง€ ์•Š์œผ๋ฉด ์ ‘์ด์‹ ์Šคํƒ ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด ๋ชจ๋ธ์€ ๊ฑฐ์˜ ๋™์ผํ•˜์ง€๋งŒ ์ „์ž ์žฅ์น˜๊ฐ€ ์—…๊ทธ๋ ˆ์ด๋“œ๋œ Active Star XNUMX์œผ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Handy Tech Active Star 40 ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด ๋‚ด๋ถ€์˜ Raspberry Pi Zero

์ ‘์ด์‹ ์Šคํƒ ๋“œ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

Handy Tech Active Star 40 ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด ๋‚ด๋ถ€์˜ Raspberry Pi Zero

ํ•˜์ง€๋งŒ ์‹ ์ œํ’ˆ์˜ ๊ฐ€์žฅ ํŽธ๋ฆฌํ•œ ์ ์€ ์Šค๋งˆํŠธํฐ ํฌ๊ธฐ ์ •๋„์˜ ํ™ˆ์ž…๋‹ˆ๋‹ค(KDPV ์ฐธ์กฐ). ํ”Œ๋žซํผ์„ ๋’ค๋กœ ์ด๋™ํ•˜๋ฉด ์—ด๋ฆฝ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์Šค๋งˆํŠธ ํฐ์„ ์ฅ๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•œ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์ง€๋งŒ ๋‚ด๋ถ€์— ์ „์› ์ฝ˜์„ผํŠธ๋„์žˆ๋Š” ๋นˆ ์นธ์„ ์–ด๋–ป๊ฒŒ ๋“  ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ €์ž๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ƒ๊ฐํ•ด๋‚ธ ๊ฒƒ์€ ๊ฑฐ๊ธฐ์— ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด๋ฅผ ๋†“๋Š” ๊ฒƒ์ด์—ˆ์ง€๋งŒ, ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ ๊ตฌ์ž…ํ–ˆ์„ ๋•Œ, ์ˆ˜๋‚ฉ๋ถ€๋ฅผ ๋ฎ๊ณ  ์žˆ๋Š” ์Šคํƒ ๋“œ๊ฐ€ '๋ผ์ฆˆ๋ฒ ๋ฆฌ'์™€ ํ•จ๊ป˜ ๋ฏธ๋„๋Ÿฌ์ง€์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ๋‹ค. ์ด์ œ ๋ณด๋“œ๊ฐ€ 3mm๋งŒ ๋” ์–‡์•˜๋”๋ผ๋ฉด...

ํ•˜์ง€๋งŒ ํ•œ ๋™๋ฃŒ๊ฐ€ ๋‚˜์—๊ฒŒ Raspberry Pi Zero์˜ ์ถœ์‹œ์— ๋Œ€ํ•ด ๋งํ–ˆ๋Š”๋ฐ, ์ด ์ œํ’ˆ์€ ๋„ˆ๋ฌด ์ž‘์•„์„œ ๋‘ ๊ฐœ ๋˜๋Š” ์„ธ ๊ฐœ๊นŒ์ง€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์„ ์ •๋„์˜€์Šต๋‹ˆ๋‹ค. 64GB ๋ฉ”๋ชจ๋ฆฌ ์นด๋“œ, Bluetooth, "ํœ˜ํŒŒ๋žŒ" ๋ฐ ๋งˆ์ดํฌ๋กœ USB ์ผ€์ด๋ธ”๊ณผ ํ•จ๊ป˜ ์ฆ‰์‹œ ์ฃผ๋ฌธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฉฐ์น  ํ›„ ์ด ๋ชจ๋“  ๊ฒƒ์ด ๋„์ฐฉํ–ˆ๊ณ , ๋ˆˆ์— ๋„๋Š” ์นœ๊ตฌ๋“ค์ด ์ €์ž๊ฐ€ ์ง€๋„๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์„ ๋„์™”์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ฆ‰์‹œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋ฌด์—‡์„ ํ–ˆ๋Š”๊ฐ€

Handy Tech Active Star 40์˜ ๋’ท๋ฉด์—๋Š” ํ‚ค๋ณด๋“œ์™€ ๊ฐ™์€ ์žฅ์น˜๋ฅผ ์œ„ํ•œ XNUMX๊ฐœ์˜ USB ํฌํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ ๋งˆ์šดํŠธ๊ฐ€ ์žˆ๋Š” ์†Œํ˜• ํ‚ค๋ณด๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค๋ณด๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  ๋””์Šคํ”Œ๋ ˆ์ด ์ž์ฒด๊ฐ€ Bluetooth๋ฅผ ํ†ตํ•ด ์ž‘๋™ํ•˜๋ฉด ์ปดํ“จํ„ฐ๋Š” ์ด๋ฅผ Bluetooth ํ‚ค๋ณด๋“œ๋กœ ์ถ”๊ฐ€๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์Šค๋งˆํŠธํฐ ์ˆ˜๋‚ฉ์นธ์— ์œ„์น˜ํ•œ ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด ์ œ๋กœ์— ๋ธ”๋ฃจํˆฌ์Šค 'ํœ˜์Šฌ'์„ ์—ฐ๊ฒฐํ•˜๋ฉด ๋ธ”๋ฃจํˆฌ์Šค๋ฅผ ํ†ตํ•ด ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. BRLTTY, ํ‚ค๋ณด๋“œ๋„ ๋””์Šคํ”Œ๋ ˆ์ด์— ์—ฐ๊ฒฐํ•˜๋ฉด "๋ผ์ฆˆ๋ฒ ๋ฆฌ"๋„ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. "๋ผ์ฆˆ๋ฒ ๋ฆฌ" ์ž์ฒด๋Š” ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ์žฅ์น˜์—์„œ Bluetooth PAN์„ ํ†ตํ•ด ์ธํ„ฐ๋„ท์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์ž๋Š” ์ง‘๊ณผ ์ง์žฅ์—์„œ ๊ทธ์— ๋”ฐ๋ผ ์Šค๋งˆํŠธํฐ๊ณผ ์ปดํ“จํ„ฐ๋ฅผ ๊ตฌ์„ฑํ–ˆ์ง€๋งŒ ์•ž์œผ๋กœ๋Š” ์ด๋ฅผ ์œ„ํ•ด ๋˜ ๋‹ค๋ฅธ "๋ผ์ฆˆ๋ฒ ๋ฆฌ"๋ฅผ ์ ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด๋Š” Zero๊ฐ€ ์•„๋‹Œ ์ด๋”๋„ท์— ์—ฐ๊ฒฐ๋œ ๊ณ ์ „์ ์ธ ์žฅ์น˜์™€ ๋˜ ๋‹ค๋ฅธ Bluetooth "ํœ˜ํŒŒ๋žŒ"์ž…๋‹ˆ๋‹ค.

BlueZ 5 ๋ฐ PAN

PAN ๊ตฌ์„ฑ ๋ฐฉ๋ฒ• BlueZ ๋ถ„๋ช…ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์ €์ž๋Š” GUI ์—†์ด PAN์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” bt-pan Python ์Šคํฌ๋ฆฝํŠธ(์•„๋ž˜ ์ฐธ์กฐ)๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ชจ๋‘ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ๋ชจ๋“œ์—์„œ ์ž‘์—…ํ•  ๋•Œ D-Bus๋ฅผ ํ†ตํ•ด ์ ์ ˆํ•œ ๋ช…๋ น์„ ๋ฐ›์œผ๋ฉด ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•œ ํ›„ ์ฆ‰์‹œ ์ƒˆ๋กœ์šด ๋„คํŠธ์›Œํฌ ์žฅ์น˜ bnep0์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ DHCP๋Š” ์ด ์ธํ„ฐํŽ˜์ด์Šค์— IP ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๋ชจ๋“œ์—์„œ BlueZ๋Š” ๊ฐ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์Šฌ๋ ˆ์ด๋ธŒ ์žฅ์น˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ธŒ๋ฆฌ์ง€ ์žฅ์น˜์˜ ์ด๋ฆ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ฆฌ์ง€ ์žฅ์น˜์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋ธŒ๋ฆฌ์ง€์—์„œ DHCP ์„œ๋ฒ„์™€ IP ์œ„์žฅ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ์ „๋ถ€์ž…๋‹ˆ๋‹ค.

Systemd๋ฅผ ๊ฐ–์ถ˜ Bluetooth PAN ์•ก์„ธ์Šค ํฌ์ธํŠธ

๋ธŒ๋ฆฌ์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ์ž๋Š” systemd-networkd๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ /etc/systemd/network/pan.netdev

[NetDev]
Name=pan
Kind=bridge
ForwardDelaySec=0

ํŒŒ์ผ /etc/systemd/network/pan.network

[Match]
Name=pan

[Network]
Address=0.0.0.0/24
DHCPServer=yes
IPMasquerade=yes

์ด์ œ BlueZ๊ฐ€ NAP ํ”„๋กœํ•„์„ ๊ตฌ์„ฑํ•˜๋„๋ก ๊ฐ•์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ BlueZ 5.36 ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ €์ž๊ฐ€ ํ‹€๋ ธ๋‹ค๋ฉด ์ •์ •ํ•˜์‹ญ์‹œ์˜ค: mlang(๊ท€๋ฅผ ์›€์ง์ผ ์ˆ˜ ์žˆ์Œ) blind(๋•Œ๋•Œ๋กœ ์ ‘๊ทผ ๋ฐ ์–‘์ž) guru

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Š” ๋ฐœ๊ฒฌํ–ˆ๋‹ค ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ะธ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ D-Bus์— ํ•„์š”ํ•œ ํ˜ธ์ถœ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์˜๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ์ž๋Š” Systemd ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ข…์†์„ฑ์ด ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ /etc/systemd/system/pan.service

[Unit]
Description=Bluetooth Personal Area Network
After=bluetooth.service systemd-networkd.service
Requires=systemd-networkd.service
PartOf=bluetooth.service

[Service]
Type=notify
ExecStart=/usr/local/sbin/pan

[Install]
WantedBy=bluetooth.target

ํŒŒ์ผ /usr/local/sbin/pan

#!/bin/sh
# Ugly hack to work around #787480
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

exec /usr/local/sbin/bt-pan --systemd --debug server pan

๋ฐ๋น„์•ˆ์— IPMasquerade= ์ง€์›์ด ์žˆ์œผ๋ฉด ๋‘ ๋ฒˆ์งธ ํŒŒ์ผ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์•„๋ž˜ ์ฐธ์กฐ). #787480).

๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„ systemctl ๋ฐ๋ชฌ -reload ะธ systemctl ์žฌ์‹œ์ž‘ systemd-networkd ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ Bluetooth PAN์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค systemctl ์‹œ์ž‘ ํŒฌ

Systemd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Bluetooth PAN ํด๋ผ์ด์–ธํŠธ

ํด๋ผ์ด์–ธํŠธ ์ธก๋„ Systemd๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ /etc/systemd/network/pan-client.network

[Match]
Name=bnep*

[Network]
DHCP=yes

ํŒŒ์ผ /etc/systemd/system/[์ด๋ฉ”์ผ ๋ณดํ˜ธ]

[Unit]
Description=Bluetooth Personal Area Network client

[Service]
Type=notify
ExecStart=/usr/local/sbin/bt-pan --debug --systemd client %I --wait

์ด์ œ ๊ตฌ์„ฑ์„ ๋‹ค์‹œ ๋กœ๋“œํ•œ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •๋œ Bluetooth ์•ก์„ธ์Šค ํฌ์ธํŠธ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

systemctl start pan@00:11:22:33:44:55

๋ช…๋ น์ค„์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์–ด๋ง

๋ฌผ๋ก , ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ๊ตฌ์„ฑ์€ ๋ธ”๋ฃจํˆฌ์Šค๋ฅผ ํ†ตํ•ด ํŽ˜์–ด๋งํ•œ ํ›„์— ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ bluetoothctl์„ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

power on
agent on
default-agent
scan on
scan off
pair XX:XX:XX:XX:XX:XX
trust XX:XX:XX:XX:XX:XX

์Šค์บ”์„ ์‹œ์ž‘ํ•œ ํ›„ ํ•„์š”ํ•œ ์žฅ์น˜๊ฐ€ ๋ชฉ๋ก์— ๋‚˜ํƒ€๋‚  ๋•Œ๊นŒ์ง€ ๋ช‡ ์ดˆ ์ •๋„ ๊ธฐ๋‹ค๋ฆฌ์‹ญ์‹œ์˜ค. ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  pair ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ trust ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋„ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜์ง€๋งŒ trust ๋ช…๋ น์€ ์ ˆ๋Œ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž์˜ ์ˆ˜๋™ ํ™•์ธ ์—†์ด NAP ํ”„๋กœํ•„์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ €์ž๋Š” ์ด๊ฒƒ์ด ์ตœ์ ์˜ ๋ช…๋ น ์ˆœ์„œ์ธ์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ํ•„์š”ํ•œ ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐํ•˜๊ณ  ์„œ๋ฒ„์—์„œ trust ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋ฟ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Š” ์•„์ง ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

HID Bluetooth ํ”„๋กœํ•„ ํ™œ์„ฑํ™”

๋ผ์ฆˆ๋ฒ ๋ฆฌ๋Š” ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด์— ์œ ์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ํ‚ค๋ณด๋“œ๋ฅผ ์ธ์‹ํ•˜๊ณ  ๋ธ”๋ฃจํˆฌ์Šค๋ฅผ ํ†ตํ•ด ๋””์Šคํ”Œ๋ ˆ์ด ์ž์ฒด์—์„œ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ ๋ช…๋ น์„ ๋‚ด๋ ค์•ผ ํ•ด ์—์ด์ „ํŠธ ํ‚ค๋ณด๋“œ๋งŒ bluetoothctl์€ HID ํ”„๋กœํ•„์ด ์žˆ๋Š” ์žฅ์น˜๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ช…๋ น์ค„์„ ํ†ตํ•ด Bluetooth๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์•ฝ๊ฐ„ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

์ €์ž๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌ์„ฑํ–ˆ์ง€๋งŒ ๋ช…๋ น์ค„์„ ํ†ตํ•ด BlueZ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ๊ทธ๋Š” ์—์ด์ „ํŠธ๊ฐ€ PIN ์ฝ”๋“œ๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด HID ํ”„๋กœํ•„์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "์—์ด์ „ํŠธ KeyboardOnly"๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. Bluetooth PAN์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์ €์žฅ์†Œ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ์ด์ „ ๋ฒ„์ „์˜ BlueZ์— ์ด๋ฅผ ์œ„ํ•œ ๊ธฐ์„ฑ ๋„๊ตฌ๊ฐ€ ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ํŒจ๋”ฉ - BlueZ 5์—์„œ ๊ทธ ์‚ฌ๋žŒ์€ ์–ด๋”” ์žˆ๋Š” ๊ฑฐ์ฃ ? ๊ฐ‘์ž๊ธฐ ์ €์ž์—๊ฒŒ ์•Œ๋ ค์ง€์ง€ ์•Š์•˜์ง€๋งŒ ํ‘œ๋ฉด์— ๋ˆ„์›Œ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์†”๋ฃจ์…˜์ด ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๊นŒ?

ะŸั€ะพะธะทะฒะพะดะธั‚ะตะปัŒะฝะพัั‚ัŒ

๋ฐ์ดํ„ฐ ์ „์†ก ์†๋„๋Š” ์•ฝ 120kbit/s๋กœ ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค. 1GHz ARM ํ”„๋กœ์„ธ์„œ๋Š” ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค์— ๋น„ํ•ด ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ €์ž๋Š” ์—ฌ์ „ํžˆ ๊ธฐ๊ธฐ์—์„œ ์ฃผ๋กœ ssh์™€ emacs๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์ฝ˜์†” ๊ธ€๊ผด ๋ฐ ํ™”๋ฉด ํ•ด์ƒ๋„

Raspberry Pi Zero์˜ ํ”„๋ ˆ์ž„ ๋ฒ„ํผ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ํ™”๋ฉด ํ•ด์ƒ๋„๋Š” ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. fbset์—์„œ๋Š” ์ด๋ฅผ 656x416 ํ”ฝ์…€(๋ฌผ๋ก  ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Œ)๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. 8ร—16 ์ฝ˜์†” ๊ธ€๊ผด์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ์ค„์— 82์ž, 26์ค„์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“œ์—์„œ๋Š” 40์ž ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. ์ €์ž๋Š” ๋˜ํ•œ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๊ฐ€ ์ ์ž๋กœ ํ‘œ์‹œ๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ Linux๋Š” 512์ž๋ฅผ ์ง€์›ํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ์ฝ˜์†” ๊ธ€๊ผด์€ 256์ž๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. console-setup์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ๊ฐœ์˜ 256์ž ๊ธ€๊ผด์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์„ฑ์ž๋Š” /etc/default/console-setup ํŒŒ์ผ์— ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

SCREEN_WIDTH=80
SCREEN_HEIGHT=25
FONT="Lat15-Terminus16.psf.gz brl-16x8.psf"

์ฐธ๊ณ : brl-16ร—8.psf ๊ธ€๊ผด์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด console-braille์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ญ์ง€?

์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด์—๋Š” 3,5mm ์žญ์ด ์žˆ์ง€๋งŒ ์ž‘์„ฑ์ž๋Š” Mini-HDMI์—์„œ ์˜ค๋””์˜ค ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋Œ‘ํ„ฐ์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ €์ž๋Š” ๋ผ์ฆˆ๋ฒ ๋ฆฌ์— ๋‚ด์žฅ๋œ ์‚ฌ์šด๋“œ ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค(์ด์ƒํ•˜๊ฒŒ๋„ ๋ฒˆ์—ญ์ž๋Š” Zero์— ์‚ฌ์šด๋“œ ์นด๋“œ๊ฐ€ ์—†๋‹ค๊ณ  ํ™•์‹ ํ–ˆ์ง€๋งŒ GPIO์— PWM์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šด๋“œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค). USB-OTG ํ—ˆ๋ธŒ๋ฅผ ์ด์šฉํ•ด ์™ธ๋ถ€ ์นด๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ด ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด์— ๋‚ด์žฅ๋œ ์Šคํ”ผ์ปค๋กœ ์†Œ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•  ๊ณ„ํš์ด๋‹ค. ์–ด๋–ค ์ด์œ ์—์„œ์ธ์ง€ ๋‘ ๊ฐœ์˜ ์™ธ๋ถ€ ์นด๋“œ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„ ์ด์ œ ๋‹ค๋ฅธ ์นฉ์…‹์„ ์‚ฌ์šฉํ•˜๋Š” ์œ ์‚ฌํ•œ ์žฅ์น˜๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

"๋ผ์ฆˆ๋ฒ ๋ฆฌ"๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋„๊ณ  ๋ช‡ ์ดˆ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ ๋„๋Š” ๊ฒƒ๋„ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ „์›์ด ๊บผ์ง€๋ฉด ๊ตฌํš์˜ ์ปค๋„ฅํ„ฐ์—์„œ ์ „์›์ด ์ œ๊ฑฐ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ €์ž๋Š” ์ž‘์€ ์™„์ถฉ ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ๊ตฌํš์— ๋ฐฐ์น˜ํ•˜๊ณ  GPIO๋ฅผ ํ†ตํ•ด Raspberry์— ๋””์Šคํ”Œ๋ ˆ์ด ๊บผ์ง์„ ์•Œ๋ฆฌ๊ณ  ์ž‘์—…์„ ์ข…๋ฃŒํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์†Œํ˜• UPS์ž…๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์ด๋ฏธ์ง€

๋™์ผํ•œ ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ์žˆ๊ณ  ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ž‘์„ฑ์ž๋Š” ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์‹œ์Šคํ…œ ์ด๋ฏธ์ง€(Raspbian Stretch ๊ธฐ๋ฐ˜)๋ฅผ ์ œ๊ณตํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์— ํ‘œ์‹œ๋œ ์ฃผ์†Œ๋กœ ์ด์— ๋Œ€ํ•ด ๊ทธ์—๊ฒŒ ํŽธ์ง€๋ฅผ ๋ณด๋‚ด์‹ญ์‹œ์˜ค. ๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ๊ทธ๋Ÿฌํ•œ ์ˆ˜์ •์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ํ‚คํŠธ๋ฅผ ์ถœ์‹œํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ์˜ ๋ง

๊ต์ •ํ•ด์ฃผ์‹  Dave Mielke์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์‚ฌ์ง„ ์‚ฝํ™”๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์‹  Simon Kainz์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ €์ž์—๊ฒŒ Raspberry Pi์˜ ์„ธ๊ณ„๋ฅผ ๋น ๋ฅด๊ฒŒ ์†Œ๊ฐœํ•ด์ค€ Graz Technical University์˜ ๋™๋ฃŒ๋“ค์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

PS ์ฒซ ๋ฒˆ์งธ ํŠธ์œ— ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์ €์ž(์—ด์ง€ ์•Š์Œ - ๋ฒˆ์—ญ์ž)๋Š” ์ด ๊ธฐ์‚ฌ์˜ ์›๋ณธ์ด ์ถœํŒ๋˜๊ธฐ ๋ถˆ๊ณผ โ€‹โ€‹XNUMX์ผ ์ „์— ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์†Œ๋ฆฌ ๋ฌธ์ œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ž‘์—…์ด ์‹ค์งˆ์ ์œผ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ €์ž๋Š” ์ž์‹ ์ด ๋งŒ๋“  "์ž๊ธ‰์ž์กฑ ์ ์ž ๋””์Šคํ”Œ๋ ˆ์ด"์—์„œ ํ…์ŠคํŠธ์˜ ์ตœ์ข… ๋ฒ„์ „์„ ํŽธ์ง‘ํ•˜์—ฌ SSH๋ฅผ ํ†ตํ•ด ์ง‘ ์ปดํ“จํ„ฐ์— ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€