본문 바로가기
[Developer]/Android

scrcpy 제대로 활용하기(2/2)

by 해피빈이 2022. 2. 20.

scrcpy가 어떤 것인지 궁금하다면 아래 링크의 글을 먼저 확인하는 것을 추천한다.

안드로이드 화면을 PC에서 컨트롤 하기(scrcpy)

scrcpy를 파워풀하게 활용하기 위한 방법을 적다보니 길어져서 두번째로 기록한다.

 

(1) scrcpy 제대로 활용하기 - 사이즈, 렌더링, 캡처 등

(2) scrcpy 제대로 활용하기 - 연결, 윈도우, 컨트롤, 파일드롭, 단축키 등

옵션 소개

캡처에 대한 부분에 이어서 제공되는 옵션을 알아보자.

연결

TCP/IP 연결(무선 포함)

이 부분은 scrcpy가 adb(Android Debug Bridge)를 이용한다는 점을 안다면, 충분히 이해가 가는 옵션이다. adb도 tcp/ip 연결을 통한 사용 방법을 제공하고 있기 때문이다. 같은 망에 연결된 기기라면(아마 모바일 기기이므로 유선은 없을 것이고 대부분 무선일 것이다.) 피씨에 직접 연결된 장치가 아니라 하더라도 동일하게 scrcpy 미러링이 가능하기 때문이다.

scrcpy --tcpip=192.168.1.1       # 기본 포트는 5555이기 때문에 생략이 가능하다.
scrcpy --tcpip=192.168.1.1:5555

만약 TCP/IP모드가 비활성화 되어있거나 IP 주소를 알지 못한다면, USB를 통해 장치를 연결하고, 아래처럼 연결을 시도하면 된다. 그러면 기기 IP 주소를 찾고, TCP/IP를 활성화한 다음, 시작하기 전에 기기에 연결하게 된다.

이렇게 한 번 연결하고 나면, USB로 다시 연결할 경우 2개 이상의 기기가 연결되어 있어서 어느곳에 연결할지 모르기 때문에 연결할 수 없다는 메시지가 발생할 수 있다. 이 경우 기기를 USB에서 제거해주고 연결하면 오히려 연결이 바로 되는 것을 볼 수 있다.

scrcpy --tcpip    # 인자값을 제외하고 입력

참고로 무선 연결시 연결이 불안정하거나 느려질 수 있으므로, 아래의 예시처럼 비트레이트를 낮춰서 연결하는 것을 추천한다.

scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800  # 위와 같으나 짧은 파라미터 버전

다중 기기 이용

앞서서 TCP/IP로 연결할 경우 여러 기기로 인식되어 있을 경우 기기를 특정할 수 없어서 연결이 불가하다고 언급하였다. 그렇다고 그럼 무조건 피씨에 한 대의 안드로이드 기기만 연결되어야 진행이 가능하다는 말인가?

그렇지 않다. 방법은 있다. 여러 대의 기기가 연결되어 있을 경우 현재 연결을 원하는 기기의 시리얼ID를 명시해주면 된다. 이 시리얼에는 기기의 Serial ID도 해당이 되지만, TCP/IP로 연결된 IP주소도 시리얼의 종류에 해당된다.

이것을 활용하면 아래의 캡처 화면처럼 실제 두 대의 기기를 동시에 미러링 및 컨트롤 하는 것도 가능하다. 실로 다양한 환경에서 개발을 진행하는 개발자에게는 매우 유용한 부분이다.

scrcpy --serial 0123456789abcdef # 기기의 시리얼로 연결
scrcpy -s 0123456789abcdef  # 짧은 파라미터 버전

scrcpy --serial 192.168.0.1:5555 # 기기의 IP로 연결
scrcpy -s 192.168.0.1:5555  # 짧은 파라미터 버전

autoadb를 이용하면 기기 연결시 자동으로 시작하는 것도 가능하다!

터널링

원격에 있는 기기를 연결하기 위해 로컬의 adb 클라이언트로 원격의 adb 서버에 연결하는 것이 가능하다.(물론 adb 프로토콜은 같은 버전을 사용해야 한다는 전제조건이다.)

아래와 같이 진행하면 된다. 먼저 adb 서버를 실행할 곳에서는 서버를 시작해야 한다.

adb kill-server
adb -a nodaemon server start
# 계속 유지해야 한다.

만약 이 서버에 192.168.1.2로 접근할 수 있다고 가정하면, 다른 터미널에서 scrcpy를 이렇게 실행해 둔다.

기본적으로 scrcpy는 adb 포워딩 터널 연결에 사용되는 로컬 포트를 사용한다.(일반적으로 27183포트이고, --port명령으로 확인하면 된다.) 필요하다면 다른 터널 포트를 지정하여 강제로 실행하는 것도 가능하다.

export ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2 # 터널의 호스트 IP 지정
scrcpy --tunnel-port=1234 # 포트를 지정하고 싶은 경우

터널을 이용한 이런 기법은 여러 안드로이드 기기를 한 곳에서 서버의 역할을 하는 피씨를 전용으로 두고 한 팀에서 공용으로 접근하기 위해서 사용하는 것이 좋을 것 같다.

adb 서버 연결을 안전하게 하기 위해서는 SSH 터널링을 사용하는 것이 좋다. 먼저 adb 서버가 원격 컴퓨터에서 실행중인지 확인하고 실행중이 아니라면 시작해 준다.

adb start-server

그리고 SSH 터널링 연결해준다.

# 로컬  5038포트에서 --> 원격  5037 포트로 연결하고
# 로컬 27183포트로   <-- 원격 27183 포트에서 연결하기를 원한다면
ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer
# 이 연결을 유지해준다.

ssh 연결을 유지한 상태에서 다른 터미널을 열어 scrcpy를 실행해 준다.

export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy

위와는 다른 방법으로 만약, 네트워크 구성에 따라 원격 포트 포워딩을 활성화 하고 싶지 않다면, 대신 포트 포워딩 연결을 강제할 수 있다. 방향을 로컬에서 리모트로만 진행될 수 있도록 할 수 있다. 뒤에서 -R대신 -L로 입력해 준다.

# 로컬  5038포트에서 --> 원격  5037 포트로 연결하고
# 로컬 27183포트에서 --> 원격 27183 포트로 연결하기를 원한다면
ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer
# 이렇게 연결하고 연결을 유지한다.

이 상태에서 다른 터미널을 열고 아래와 같이 scrcpy를 실행해 준다.

export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward

이 역시 원격 연결이기 때문에 아래처럼 품질을 떨어뜨려서 연결을 원활하게 할 수 있다.

scrcpy -b2M -m800 --max-fps 15

윈도우 환경 구성

이 부분은 실제 화면에 보여주는 부분이기 때문에 특수한 환경이 아니라도 유용하게 활용하는 부분이라고 생각된다.

윈도우 타이틀은 기본적으로 기기 모델명으로 나오지만 별도로 설정하고 싶다면 아래처럼 하면 된다.

scrcpy --window-title 'My device'

위치와 크기를 지정하고 싶다면 아래처럼 입력한다.

(참고로 크기는 해상도와는 다르다. 단지 윈도우의 창 크기일 뿐이다. 화질에는 영향주지 않으며 초기 값일 뿐이기 때문에 마우스로 늘이거나 줄이면 변경되는 값이다.)

1:1 비율로 윈도우 크기를 재조정 하려면 MOD + g 를 하면 된다

scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600

기본적으로 테두리가 생성되지만, 테두리를 없애고 싶다면?

scrcpy --window-borderless

항상 다른 윈도우보다 최상단에 위치하게 하고 싶다면?

scrcpy --always-on-top

풀 스크린으로 시작되도록 하고 싶다면?

(이것은 윈도우가 최대크기로 생성되는 것이 아닌, 진짜 전체화면이다.)

뒤에서 이야기 할 MOD + f를 이용하면 동적으로 전체화면을 토글할 수 있다. MOD를 이용하지 않으면 다시 윈도우 모드로 돌아갈 수 없다.

scrcpy --fullscreen
scrcpy -f  # 짧은 파라미터

윈도우 회전을 하고 싶다면(이것은 비디오 회전과는 다르다)

scrcpy --rotation 1

참고로 MOD를 이용하면 동적으로 변경이 가능하다.

scrcpy에서는 3 가지 화면 회전 관리 방법이 있다.

  • MOD + r 이 방법은 세로모드와 가로모드를 전환하도록만 한다.
  • --lock-video-orientation 이 방법은 미러링 방향을 변경하는 것인데, 녹화시에 영향을 준다.
  • --rotation 혹은 MOD + 왼쪽화살표 혹은 오른쪽화살표 이것은 윈도우를 90도씩 회전해 준다. 녹화시에 영향을 주지는 않는다.

기타 미러링 옵션

읽기 전용으로 띄우려면?

키보드 입력과 마우스 이벤트와 드래그 앤 드롭으로 파일을 놓는 것 모두 해당된다. 완전히 컨트롤이 불가능하다고 보면 된다.

scrcpy --no-control
scrcpy -n

연결을 유지하고 있는 이상 슬립 모드에 들어가지 않고, 깨우기 모드를 유지하고 싶다면?

물론 scrcpy를 종료하고 나면 원래대로 돌아간다.

scrcpy --stay-awake
scrcpy -w

만약 미러링이 시작된 뒤 실제 기기의 화면을 꺼 두고 싶다면?

MOD 이용시 MOD + o를 이용하면 언제든 동적으로 설정이 가능하다. 다시 돌아오려면 MOD + Shift + o 를 이용하면 된다.

재밌는 점은 안드로이드에서는 파워버튼을 누를 경우 언제든 화면은 켜지도록 되어 있다. 편의상 POWER가 scrcpy를 통해서 전송된다면(마우스 우클릭 또는 MOD + p를 통해, 갤럭시의 경우 좌 더블클릭으로도) 약간의 지연 후 화면을 강제로 끄게 할 수는 있다. 물론 다시 이후에 물리적으로 파워버튼을 누르면 화면이 켜지긴 한다.

scrcpy --turn-screen-off
scrcpy -S

# 만약 잠자기 모드를 방지하면서 물리적 화면을 끄려면 아래처럼 한다.
scrcpy --turn-screen-off --stay-awake
scrcpy -Sw

만약 scrcpy를 닫을 때 기기의 화면을 끄고 싶다면, 아래와 같이 입력해 준다.

scrcpy --power-off-on-close

또한 프리젠테이션 같은 것을 하기 위해 물리적 터치를 보여주는 것이 필요할 경우가 있는데, 이 경우 미러링 할 때 터치 위치를 보여주도록 할 수 있다. 이 경우 이 옵션을 켜더라도 scrcpy를 종료하면 원래 기기의 설정대로 돌아가게 된다.

오해하지 말 것은 이 옵션을 켜더라도 scrcpy를 통해 입력된 마우스 클릭 위치를 보여주지는 않는다. 오로지 기기에서 손가락으로 물리적 터치를 한 위치만 보여주게 된다.

scrcpy --show-touches
scrcpy -t

scrcpy를 작동하는 동안 피씨의 스크린세이버를 작동하지 않게 하려면?

scrcpy --disable-screensaver

컨트롤 방법

  • 복사, 잘라내기, 붙여넣기

Ctrl + c , Ctrl + x , Ctrl + v 를 이용하면 잘 알려진 것처럼 복사, 잘라내기, 붙여넣기가 가능하다. 특히 이것은 피씨와 동기화가 된다는 것이 특징이다.

또한 MOD 사용시 MOD로 설정된 키를 이용하여 Ctrl 키를 대체할 수 있다. 또한 경우에 따라서는 MOD + Shift + v 키를 입력하여 피씨의 클립보드를 키 이벤트로 입력할 수 있다.

만약 피씨와 자동으로 동기화 되는 것을 원하지 않는다면 다음의 명령어를 이용하면 된다.

scrcpy --no-clipboard-autosync
  • 핀치-투-줌

Ctrl 키를 누른 상태에서 마우스 좌클릭 및 이동을 하면 된다. 화면 중앙을 기준으로 멀리 떨어질 수록 손가락을 벌린 효과가 발생된다.

  • Text 인젝션 설정

키 이벤트 혹은 텍스트 이벤트로 설정할 수 있다.

키 이벤트란 키가 눌리고, 해제되는 이벤트로 처리되는 방식으로 인지되는 것이며, 텍스트 이벤트는 오직 입력한 텍스트가 전달되는 방식으로 처리되는 것이다. 게임같이 키를 누르고 있는 이벤트에 민감할 경우 다르게 처리되게 된다. 기본 값은 키 이벤트 방식이다.

또한 키 반복 입력이 기본이지만, 반복입력되지 않게 하기 위해서는 다음과 같은 옵션이 있다.

scrcpy --prefer-text # 텍스트 이벤트
scrcpy --raw-key-events # 키 이벤트
scrcpy --no-key-repeat # 키를 반복입력하지 않도록 하기
  • 마우스 클릭 이벤트

마우스 가운데 클릭시 Home 키를 누른 효과가 발생하며, 우클릭시 Back키를 누른 효과가 발생한다.

파일 드롭

APK를 설치하기 위해서는 .apk로 끝나는 파일을 scrcpy 윈도우로 드래그 앤 드롭한다. 비주얼적인 피드백은 없고, 확인하는 방법은 터미널 창으로 한다.

또한 파일을 밀어넣기 위해서는 역시 scrcpy 윈도우로 apk가 아닌 파일을 드래그 앤 드롭한다. 그러면 /sdcard/Download 폴더로 복사된다. 역시 터미널에서 진행상황 확인이 가능하다.

만약 복사될 위치를 변경하고 싶다면 다음의 명령어로 가능하다.

scrcpy --push-target=/sdcard/Movies/

이 밖에 오디오 포워딩은 안되며, 자매품 sndcpy를 이용하면 된다.

단축키 이용

아래 별도의 목록으로 정리되어 있으며 MOD라고 되어있는 것은 단축키를 수정할 경우 수정된 단축키에 해당된다. MOD를 바꾸고 싶다면 --short-mod를 이용하면 되며, 가능한 키로는 lctrl, rctrl, lalt, ralt, lsuper, rsuper 가 있다. super는 윈도우의 윈도우키, 혹은 맥의 커맨드키를 의미한다.

# 오른쪽 Ctrl로 단축키를 이용할 경우
scrcpy --shortcut-mod=rctrl

# 조합키인 LCtrl+LAlt를 이용하거나 LSuper 하나의 키로 단축키를 이용할 경우
scrcpy --shortcut-mod=lctrl+lalt,lsuper
  • 주요한 몇 개를 정리하면 아래와 같다.

전체화면 모드로 전환Ctrl+f

window를 1:1비율로 전환하기(픽셀 맞춤)Ctrl+g

검은 공백 제거 위한 window 크기 조정Ctrl+x

HOME 클릭Ctrl+h

BACK 클릭Ctrl+b

APP_SWITCH 클릭Ctrl+s

MENU 클릭Ctrl+m

VOLUME_UP 클릭Ctrl+

VOLUME_DOWN 클릭Ctrl+

POWER 클릭Ctrl+p

미러링 중 디바이스 화면 끄기Ctrl+o

알림 패널 늘리기Ctrl+n

알림 패널 닫기Ctrl+Shift+n

FPS 카운터 활성화/비활성화 (on stdout)Ctrl+i

각 환경변수 설정

  • ADB 경로를 설정하고 싶다면, ADB 에 설정한다. 예를 들면, ADB=/path/to/adb scrcpy 이런식이다.
  • scrcpy-server 경로를 설정하고 싶다면, SCRCPY_SERVER_PATH
  • 아이콘 경로를 설정하고 싶다면, SCRCPY_ICON_PATH

결론 - 추천하는 옵션

가볍게 이용하기 좋은 옵션들로 한, 개인적으로 추천하는 조합은 아래와 같다. 의미는 위를 참고하면 된다.

scrcpy -s [Serial ID] --always-on-top --shortcut-mod=lctrl -Sw --power-off-on-close

참고자료

반응형

댓글