Android가 물리적 USB 키보드로 작동하도록 프로그래밍 할 수 있습니까?


80

제가 정말로 알고 싶은 것은 그것이 하드웨어 문제인지 소프트웨어 문제인지입니다. USB를 통해 내 안드로이드 폰을 컴퓨터에 연결하고 하드웨어 키보드로 작동하도록 할 수 있습니까? 컴퓨터에 아무것도 설치하고 싶지 않고, 안드로이드가 표준 하드웨어처럼 동작하기를 원합니다.


편집 : 설명 장치가 일반 키보드를 완전히 에뮬레이션 할 수 있도록 Android 용 프로그램 / 라이브러리를 작성하여 운영 체제가 표준 키보드 장치로보고하고 BIOS 또는 키보드가있는 다른 모든 곳에서 작동합니다. 공장.


1
Linux 커널에는이 기능이 포함되어 있지만 Android 커널에서 HID 가젯 지원 상태가 어떤지 잘 모르겠습니다.
Greg Inozemtsev 2012 년

3
성공 했습니까? Play 스토어에서 앱을 사용할 수 있습니까?
jeet.chanchawat

답변:


44

MTP / ADB / 기타 USB 기능을 잃지 않고 표준 HID 키보드 및 마우스처럼 작동하도록 Nexus 7의 커널을 수정했습니다.

usb-gadget-test 명령 줄 유틸리티를 사용하여 키 입력과 마우스 움직임을 PC로 보낼 수 있습니다. 나중에 주요 이벤트를 보내고 카메라에서 비디오를 수신하는 원격 관리자 앱을 만들고 싶습니다.

커널 패치, 바이너리 및 지침 : https://github.com/pelya/android-keyboard-gadget

편집 : Google Play에 적절한 앱을 게시했습니다. Nexus 7이 루팅 된 경우 앱에서 바로 커널을 플래시하고 키 누르기를 함께 보낼 수 있습니다.


iOS에서도 가능합니까?

3
탈옥하고 자신의 패치로 사용자 정의 XNU 커널을 설치해야하므로 내 패치는 Linux 커널이 아니므로 작동하지 않습니다. 실제로 iPad를 조정하고 벽돌을 만드는 것보다 중고 Nexus 4/5/7을 구입하는 것이 훨씬 저렴합니다.
pelya

xnu 커널에 대한 자세한 내용과 자체 패치를 만드는 방법은 어디서 얻을 수 있습니까? 나는 그것에 너무 익숙하지 않다. 하자가 iOS 장비가 탈옥되어 가정

안녕하세요 @pelya 나는 내 안드로이드 mtk 6589 기반의 커널을 컴파일하려고했습니다. 그러나 뭔가 낡은 것 같습니다. 도울 수 있니 ? 나는 당신이 그런 것들을 많이 썼고 안드로이드를 거의 보편적 인 PC 장치로 만드는 것을 보았다. : D
Abhigyan

안타깝게도 앱은 이후 Play 스토어에서 삭제되었습니다.
Jacob Sánchez

14

대부분의 USB 키보드를 실행하려면 드라이버가 필요합니다. 표준 HID 드라이버 의 기능을 넘어선 모든 키보드 기능 (비표준 버튼) 은 컴퓨터에 일부 소프트웨어를 설치해야합니다.

즉, Android의 USB 기능 을 사용 하고 기본 HID가 충분하지 않은 경우 사용자 지정 드라이버를 작성하여 목표를 달성 할 수 있습니다. 이것은 매우 사소한 작업 일 것입니다.

편집 : KristopherMicinski가 재고 Android USB API로 얻는 제어 수준이이 목적에 적합하지 않다고 생각합니다. HID 표준을 사용하여 통신하도록 펌웨어를 수정하는 그의 두 가지 솔루션과 Android 액세서리 프로토콜에서 HID로 변환하는 하드웨어 중개자가 나에게 모두 유효 해 보입니다. 컴퓨터에 드라이버를 설치하는 것이 의문의 여지가 없다면이 두 가지 옵션 만있을 수 있습니다.

그러나이 동작에 대해 드라이버를 설치할 수 있다면 Android USB 프로토콜을 처리 할 수있는 사용자 지정 드라이버를 작성하고 키보드 기능에 대한 올바른 호출 / 중단으로 올바르게 변환 할 수 있어야합니다. 메모리가 작동하는 경우 지난 10 년 동안 사용했던 모든 주변 장치 키보드는 전체 기능을위한 드라이버를 설치해야하므로 비표준 동작으로 간주되지 않을 수 있습니다. (이 접근 방식은 장치가 부팅 프로세스 중이 아닌 창 내부의 키보드로만 작동하도록 허용하지만)


나는 당신의 대답이 해결책으로 이어질 수 있을지 의심 스럽지만, 당신은 유용한 자원으로 문제를 해결하기 위해 여기에서 가장 해결책 지향적 인 대답을 제공했기 때문에 당신에게 현상금을 수여했습니다. 감사합니다 ~)
빌리 달

11

누군가 드디어 한 것처럼 보이지만 약간 못 생겼지 만 여기에 있습니다.

http://forum.xda-developers.com/showthread.php?t=1871281

커널 재 컴파일과 약간의 편집이 필요하며 부분적인 기능 (MDC?)을 잃어 버립니다. ..하지만 끝났습니다.

하지만 개인적으로 "진정한 비용"을 확인 했으므로 Android가 USB를 통해 직렬 장치와 통신 할 수 있다고 가정하면 Teency 또는 기타 장치에 작은 어댑터를 추가 할 수 있습니다. 그러나 그것은 내가 삼성을 가지고 있고 어쨌든 USB 연결을 만들기 위해 특별한 케이블이 필요하다는 사실에 근거합니다.


예, USB로 다른 모든 기능을 잃어 버렸고 이것은 완벽하지는 않지만 무엇을합니다. 여전히 Wi-Fi를 통해 adb를 사용하고 SD 카드를 통해 파일을 전송할 수 있습니다. 어떤 단계에서 시간이 있다면 원래 기능을 복원하기 위해 그것을 수정하려고 노력할 수 있습니다.
이상적으로

안타깝게도 장치가 항상 [gadget] 모듈의 완전한 보완을 지원하지 않는 커널을 제공하는 것처럼 보이는 것은 SOP 인 것 같습니다. 빛나다, 안드로이드, 심지어 평가판이든 상관 없습니다. 저는 태블릿에서 BitLocker 사용을위한 결합 된 대용량 저장소 / HID 솔루션을 구축하려고했습니다. 젠장 실망 스럽습니다. 추신 : 당신이했던 훌륭한 일.
Orwellophile

나중에 대용량 저장소를 추가하는 데 관심이 있지만이 작업을 먼저 마무리하겠습니다. 만족 스러우면 어떻게했는지에 대한 튜토리얼을 게시 할 것입니다. 임 현재 C. 희망 작성된 작은 응용 프로그램을 통해 운전자에게 이야기에 안드로이드 응용 프로그램을 얻는 작업은 다음 주에 할 정도합니다
DARC

5

누군가 커널을 패치하여 한 것 같습니다. 저는 Angelos Stavrou, Zhaohui Wang, 컴퓨터 과학과 George Mason University, VA의 "재미와 이익을 위해 스마트 폰 USB 연결성 활용"이라는 제목의 논문을 발견했습니다. (위의 제목을 검색하여 자유롭게 사용 가능). 여기에서 두 연구원은 안드로이드 장치가 HID 장치 (키보드)로 표시되도록하여 연결된 PC를 제어하는 ​​손상된 안드로이드 장치의 가능성을 조사하고 있습니다. 개념 증명으로서, 그들은 당신이 원하는 것을 정확히 수행하는 커널을 성공적으로 패치 한 것 같습니다. 그들은 자세한 단계를 제공하지 않았지만 어쨌든 그들이 한 일을 인용했습니다.

..... 우리는 Linux 용 USB Gadget API [4]를 사용하여 Android Linux 커널의 기존 USB 복합 인터페이스 외에 특수 USB 가젯 드라이버를 개발했습니다. UGAL 프레임 워크는 간단한 USB HID (Human Interface Driver) 기능 (예 : 장치 드라이버)과 다양한 커널 API 간의 연결 코드를 구현하는 데 도움이되었습니다. "drivers / usb / gadget / composite.c"에 제공된 코드를 사용하여 추가 복합 USB 인터페이스로 자체 가젯 드라이버를 만들었습니다. 이 드라이버는 USB 키보드 장치를 시뮬레이션합니다. 또한 미리 프로그래밍 된 입력 명령을 데스크탑 시스템으로 보내는 USB 마우스 장치를 시뮬레이션 할 수 있습니다. 따라서 일반 USB 마우스 또는 키보드 장치로 가장하고 미리 정의 된 명령을 은밀하게 전송하여 악의적 인 대화 형 사용자 활동을 시뮬레이션하는 것은 간단합니다. 이 기능을 확인하려면 통제 된 실험에서 키 코드 시퀀스를 전송하여 치명적이지 않은 작업을 수행하고 그러한 조작 된 장치가 어떻게 손상을 유발할 수 있는지 보여줍니다. 특히 "CTRL + ESC"키를 전송하는 Dell USB 키보드 (vendorID = 413C, productID = 2105)를 시뮬레이션했습니다. 시스템을 재부팅하려면 조합과”U”및”Enter”키 시퀀스를 누르십시오. USB 연결 만 필요하며 데스크탑 시스템에 대한 "현재 사용자"권한을 얻을 수 있습니다. 추가 로컬 또는 원격 익스플로잇을 페이로드로 전송하면 맬웨어가 권한을 상승시키고 데스크톱 시스템에 대한 전체 액세스 권한을 얻을 수 있습니다. productID = 2105)”CTRL + ESC”키 조합과”U”및”Enter”키 시퀀스를 전송하여 시스템을 재부팅합니다. USB 연결 만 필요하며 데스크탑 시스템에 대한 "현재 사용자"권한을 얻을 수 있습니다. 추가 로컬 또는 원격 익스플로잇을 페이로드로 전송하면 맬웨어가 권한을 상승시키고 데스크톱 시스템에 대한 전체 액세스 권한을 얻을 수 있습니다. productID = 2105)”CTRL + ESC”키 조합과”U”및”Enter”키 시퀀스를 전송하여 시스템을 재부팅합니다. USB 연결 만 필요하며 데스크탑 시스템에 대한 "현재 사용자"권한을 얻을 수 있습니다. 추가 로컬 또는 원격 익스플로잇이 페이로드로 전송되면 맬웨어가 권한을 상승시키고 데스크톱 시스템에 대한 전체 액세스 권한을 얻을 수 있습니다.


3

이것이 가능하다는 것을 알 수있는 유일한 방법은 다음과 같습니다.

  • 필요한 프로토콜을 사용하여 작동 할 수있을만큼 충분히 낮은 수준에서 USB 수준 액세스를 제공하도록 Android 펌웨어를 수정했습니다.

또는

  • 장치에 연결 한 일종의 특수 하드웨어 수준 변환기를 만들었습니다.

(그래서 원하는 작업량에 따라 하드웨어 또는 소프트웨어 문제 일 수 있습니다 .)


제한 사항 등 펌웨어 수정 옵션에 대해 좀 더 설명해 주시겠습니까? 어떤 문제가 발생합니까 (기존 소프트웨어를 실행하거나 전화기를 업데이트 할 수 있습니까)? 이런 종류의 작업을 수행하는 방법에 대한 정보는 어디서 얻을 수 있습니까? 건배.
Billy Moon

글쎄, 나는 기본적으로 (즉, 재고 펌웨어에서) USB 기능 (Slothsberry에서도 언급)이 출력을 구현하는 데 필요한 방식으로 출력을 제어하기에 충분한 수준의 USB 하드웨어에 대한 액세스를 제공한다고 생각하지 않습니다. 이런 일이 일어나도록해야합니다. (즉, 신호를 받아들이지 말고 출력 해야 합니다.)
Kristopher

blutooth는 어떻습니까? 안드로이드를 blutooth 키보드로 사용하려는 것은 아니지만, blutooth 키보드 신호를 수신하여 컴퓨터에 필요한 드라이버없이 컴퓨터로 전달하는 기존 USB 장치가있을 수 있습니다 ... 나는 희망적인 것 같지만 그럴 것입니다. 나를 위해 일하십시오.
Billy Moon

이것은 이론적으로 가능할 것입니다. Android 장치와 통신 할 수있는 Bluetooth 수신기를 가져 와서 전화기의 BT 신호를 해석 한 다음이를 유효한 키보드 신호로 변환하는 작은 회로를 만들어야합니다. SparkFun에서 모든 부품을 구입할 수 있지만 매우 간단하지는 않습니다 (예 : 주말 해킹?). 돈 / 시간이 많으면 할 것입니다. :-) 가능하다고 확신하지만 상자에서 나온 것이 없다고 생각합니다.
Kristopher Micinski

2

최근 안드로이드로 루팅 된 기기가 있으면 할 수 있다고 생각합니다. 예를 들어 Android 4를 실행하는 Asus Eee Pad Transformer에는 /system/lib/libusb.so및 라이브러리가 /system/lib/libusbhost.so있으므로 JNI를 사용하여 USB 키보드를 에뮬레이션하는 Java 애플리케이션을 작성할 수 있습니다. 이는 USB 키보드가 PC와 통신하는 방식을 에뮬레이트하는 접착제 C 코드를 작성해야 함을 의미합니다 (= USB 프로토콜 작동 방식을 연구해야 함).

일반적으로 이러한 라이브러리를 사용하려면 일부 권한이 필요하기 때문에 "루팅"이라고합니다.

편집 : 위의 내용은 USB 호스트로 작동하도록 Android 장치를 프로그래밍 할 때 사실입니다. 귀하의 경우 "가젯"이되어야합니다. Android 기기의 커널에 Linux 가젯 기능이 얼마나 많이 포함되어 있는지 모르겠습니다. 비슷한 질문을 보려면 이것을 참조하십시오 .


2

Android는 호스트에 연결될 때 이미 VID / PID로 식별됩니다. 대용량 저장 소용 인터페이스가 이미 있습니다. 03:01 HID에 대한 두 번째 인터페이스를 지원하려면 낮은 수준에서 드라이버를 해킹해야합니다. 그러면 수정 된 드라이버에 스캔 코드를 푸시하는 문제 일뿐입니다. 간단하지는 않지만 깔끔한 해킹이 될 것입니다. 한 가지 용도는 로그인을 위해 긴 임의의 암호를 입력하는 것입니다.


나는 이것이 전화가 루팅되어야 할 것이라고 기대합니다. 다른 전제 조건이있을 것으로 예상하십니까?
Billy Moon

예, 아마도 응원해야 할 것입니다. 사용하려는 인터페이스는 Linux "Gadget"API입니다. link 질문에 대한 Greg의 의견, 즉 Gadget이 답입니다.
레나테

내가 체크 한 답을 읽었습니까? 동의하십니까? ANdroid가 ROM에 인터페이스 설명자를 저장하기 때문에 불가능하므로 프로그래밍 할 수 없음을 확인하거나 거부하는 정보가 있습니까?
Billy Moon

내 Android는 적어도 두 개의 VID / PID로 응답 할 수 있습니다. 하나는 FastBoot 용이고 하나는 정상적인 Android 작동 용입니다. 일반적인 Android 작동에서는 USB Mass Storage와 ADB의 두 가지 인터페이스를 지원합니다. 정확히 하나가 추가 인터페이스를 추가하는 방법은 모르겠지만 하드웨어에 제한이있는 것은 아닙니다. USB 가제트가 올바른 방향으로 보입니다.
Renate 2012-09-06

@Renate에게 감사합니다-유망 해 보입니다!
Billy Moon

2

포기하지 마십시오. Linux는 "USB Gadgets"를 통해 올바른 하드웨어로이를 수행 할 수 있습니다. 그리고 다음 사실을 제공합니다.

  1. 나의 오래된 Nokia N95는 USB를 사용하여 "대용량 저장 장치", "미디어 플레이어", "GSM 모뎀"으로 사용하거나 사진을 인쇄 할 수 있습니다.
  2. Apple USB-Camera 패시브 어댑터를 통해 iPhone을 iPad에 연결하면 사진이 전송됩니다.
  3. iPhone은 DFU에 들어갈 때와 같이 여러 가지로 분명히 나타날 수 있습니다.

이 모든 것이 왜 관련이 있습니까?

내가 리눅스 폰을 작성 한다면 그것이 무엇을 할 것인지, 어떻게 할 것인지를 알고 있기 때문입니다. 그리고 대답은 USB 가제트를 포함합니다.

여기에 게시 된 링크 중 하나를 읽고,

Linux 커널이고, 관심이 있다면 kernel.org 트리의 drivers / usb / gadget /에 코드가 있습니다. Android에는 메인 라인에없는 특정 가젯 패치가 몇 가지 있지만 그다지 많지는 않습니다. 개발자를 귀찮게 할 필요없이 커널 git 트리를 확인하면이 모든 것을 볼 수 있습니다.

나는 당신이 그것을 시도 할 것이라고 생각할 것입니다. 그러나 그것은 안드로이드 커널 / 운영체제를 재 컴파일하거나 적어도 당신이 원한다면 커널을 재 구축 할 수있는 빌드 환경을 가지고 있어야합니다.

BTW, USB 장치를 지원하지만 HID 모듈과 함께 제공되지 않는 Atmel NGW100mkII가 있습니다. 그리고 나는 위와 더 많은 것을해야 할 것입니다.


포기하지 않으려 고 노력할 것입니다.하지만 처음부터 완전히 불가능하다면 큰 사업처럼 보입니다. 이 게시물에서 나에게 생각 / 연구 할 많은 것을 주셨습니다. 감사.
Billy Moon

탈옥 한 iPhone 용 앱을 찾았습니다.이 앱은 여러 개의 "가상 디스크"를 선택할 수있는 USB 대용량 저장 장치로 바꾸고 iTunes / 사진 가져 오기를 실행하지 않도록 USB devId를 변경합니다. (당신에게 도움이되지는 않지만 iPhone에는 놀라운 기능입니다.) 또한 원하는 작업을 수행 할 수있는 Texas TI84 + SE 계산기 용 USB 라이브러리도 발견했습니다 (플레이 스테이션 잠금도 해제 됨). 어쨌든 내 삼성 갤럭시 노트가 오늘 도착했기 때문에 실제로 Android 장치가 있습니다.
Orwellophile 2012 년

2

추가 드라이버 없이도 가능합니다.

작은 USB 동글 크기의 장치로 PC의 USB 키보드를 에뮬레이션 한 다음 Android 장치를 사용하여 Bluetooth를 통해 키보드 (및 / 또는 마우스) 데이터를 보낼 수 있습니다.

Indiegogo 캠페인의 설명 동영상을 살펴보세요 : http://igg.me/at/hiDBLUE/x/3400885

BTW : 제품 기술 문서는 http://www.flyfish-tech.com/hiDBLUE에서 볼 수 있습니다.


1

tcp / ip 및 adb를 통해 Android를 즉시 사용하려면 일종의 연결을 설정해야하므로 컴퓨터에 적어도 adb와 리스너를 설치하지 않아도됩니다.

그러나 USB를 통해 데이터와 같은 하드웨어 키보드를 보내는 활동이 있다면 왜 안됩니까? 쉽지 않을 것 같아요. 이 시점에서 usuas 포럼 답변이 바로 나옵니다. "계획을 변경하고 ....":)


1
Android가 표준 컴퓨터 장치의 하드웨어 키보드로 작동 할 수 있도록하는 라이브러리를 개발하고 싶기 때문에 계획을 변경하고 싶지 않습니다. 개발자 또는 사용자로서 비표준 설정을 요구하는 일종의 추상화 된 통신 프로토콜을 사용하는 것보다 분명히 바람직합니다.
Billy Moon

1

다른 사람들은 이것이 잘못되었다고 생각했습니다. 그동안 나는 그들의 의견을 공유합니다. 죄송 해요.

이전 잘못된 답변 :

제 생각에는 이것은 거의 가능하지 않습니다.

컴퓨터는 USB 장치 설명자 또는 USB 인터페이스 설명 자로 모든 USB 장치를 식별합니다. Android 기기를 키보드로 사용하려면이를 변경해야합니다. 사실 나는 이것들이 장치의 ROM에 저장되어 있다고 생각하므로 하드웨어를 변경해야 할 것입니다. 장치는 전원이 꺼진 상태에서만 충전이 되어도 호스트와 자신을 식별해야합니다 (USB 호스트에 전력 소비에 대해 알려야하고 그렇지 않으면 최대 몇 mA 만 표시해야 함). 저에게 이것은 하드웨어를 변경해야한다는 방향을 가리 킵니다.

"가장 쉬운"방법은 수신 된 데이터 (여전히 usb를 통해 보내야하는)를 컴퓨터로 보내는 ps / 2 또는 usb-client 신호로 변환하는 µC가있는 usb 호스트 칩이 포함 된 어댑터를 조립하는 것입니다.

제 생각에 가장 쉬운 방법은 다음과 같습니다.이 키보드 중 하나를 구입하여 가방에 넣을 수도 있습니다.


Android USB 연결의 ROM 식별에 대한 의심을 확인하는 리소스를 가리킬 수 있습니까?
Billy Moon

2
Android 디스크립터가 하드 코딩되었는지 확인하고 싶지만 올바른 것처럼 보이지만 답변을 틱했습니다. , ~)
Billy Moon

4
잘못되었습니다. Android의 대부분의 USB 장치는 소프트웨어로 구현됩니다.
Darwin

1

이 질문에 대해 언급하기에는 조금 늦었지만 다른 사람들에게 유용 할 수 있습니다.

안드로이드 폰을 키보드, 마우스, 카메라, 사운드 스트리밍 시스템, 테 더링 장치처럼 작동하도록 만들 수 있습니다. 간단히 말해서, 시장에서 볼 수있는 USB 장치와 하드웨어가 제한하지 않는 한. 속도 또는 가젯 인터페이스 등을 사용할 수 없습니다.

USB 장치는 호스트와 가젯의 두 가지 유형입니다. 따라서 가젯 장치는 클라이언트처럼 작동하며 일반적으로 대부분의 전화에서 USB OTG 인터페이스를 가지고 있습니다. 따라서 가제트 끝에서 다른 구성 사이를 전환하여 휴대 전화가 전혀 다른 장치처럼 작동하도록 만들 수 있습니다 (USB 설정으로 이동하여 장치를 대용량 저장소 또는 다른 것으로 만들 때 이미 수행 중입니다).

그러나이 모든 작업을 수행하려면 안드로이드 커널을 수정해야합니다. 안드로이드 장치 개발자라면 확실히 할 수 있습니다.


3
기록을 위해 이것은 블로그가 아니며 그렇게 취급되어서는 안됩니다. 자세한 내용 은 FAQ 를 확인하십시오 . 편집 : 그 메모 에서 메타 아웃에 대한이 질문 을 확인 하는 것을 고려하십시오 .
Jules

0

사용자로서 여기에 약간의 경험이 있습니다. 가장 확실한 해결책은 클라이언트 / 서버 모델을 통한 tcp / ip를 사용하는 것입니다. airkeyboard (http://www.freenew.net/iPhone/air-keyboard-111/171415.htm)와 같은 많은 도구는 스마트 폰 OS를 사용하여 키보드 / 마우스 교체를 만드는 데이 방법을 사용합니다. 구현시 명백하게 드러나는 몇 가지 보안 문제가 있습니다. 예를 들어 서버 구성 요소를 사용하려면 로그인해야합니다.

다른 크로스 플랫폼 도구 (예 : 다른 Windows / mac 인스턴스를 제어하는 ​​windows / mac)는 유사한 접근 방식을 사용합니다. synergy보기 : http://synergy-foss.org/


의견을 보내 주셔서 감사합니다.하지만 실제로는 컴퓨터에 소프트웨어가 설치되지 않은 전화 소프트웨어 만 찾고있었습니다.
Billy Moon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.