blog
November 13, 2021
바깥에서 가방에 맥북이 있는 채로 가볍게 아이패드나 아이폰에서 ssh 로 맥북에 접속할 수 있다면 재밌지 않을까? 버스에서 핸드폰으로 가방의 맥북에 접속하여 가볍게 작업하는 것이 가능하다면 재밌을 것 같다.
가벼운 c 프로그램을 작성해볼 수도 있을 것이고, python 을 가지고 노는 것도 가능할 것이다.
아니면 man page 를 뒤적여 볼 수도 있을 것이다.
나는 오늘 ‘핸드폰으로 가방에 있는 맥북에 ssh 로 접속하기’ 를 목표로 시도하여 성공한 방법을 소개하겠다.
우선 router 없이 맥북과 핸드폰을 직접 연결하기 위해 검색하던 중, 맥북이 마치 router 같은 역할을 하여 Wi-Fi 를 통해 주변 기기와 local network 를 구성하는 방법을 발견했다.
이런 식의 network 를 ad hoc network 라고 하는 듯 하다.
공유기를 통하지 않고 직접 통신하는 local network 를 지칭하는 단어인 것 같다.
내가 시도한 방법은 다음과 같다.
이 과정을 마치고 나면 맥북이 router 같은 역할을 하게 되어 다른 기기를 사용하여 맥북의 local network 에 직접 연결할 수 있게 된다. 이제 핸드폰의 Wi-Fi 설정에서 맥의 network 가 보일 것이다(시간이 좀 걸릴 수 있다). Wi-Fi 를 잡으면 두 기기간의 local network 가 형성된 것이다. 이제 핸드폰에서 ssh 연결을 해주는 앱을 사용하여 맥북에 접속할 수 있다.[주석:1]
연결은 됐지만 아직 완벽히 문제를 해결한 것은 아니다.
가방에 맥북을 넣으면 배터리를 사용하는 상태에서 화면이 덮여 있기 때문에 맥은 자동으로 sleep 하게 되고, 이로 인해 연결해 놓은 ad hoc network 연결이 끊어진다.
이 문제를 해결하기 위해 sleep 을 방지하는 방법을 알아보았다.
전원 케이블을 연결한 상태에서 클램쉘 모드를 사용하는 방법은 널리 알려져 있다.
하지만 gui 로 제공되는 ‘시스템 환경설정’ 만으로는 배터리를 사용하는 맥북 화면을 덮었을 때 sleep 하는 것을 막을 수 없다.
맥북의 화면을 덮었을 때 sleep 하지 않도록 설정하는 방법은 구글링을 통해 어렵지 않게 알아낼 수 있었다.
나는 pmset 이라는 cli 명령어를 사용하였다.
sudo pmset -b disablesleep 1
이 명령어를 실행하면 배터리를 사용하는 맥의 화면을 덮어도 sleep 하지 않기 때문에 네트워크의 연결이 끊기지 않고 유지 된다[주석:2]. 단, 화면을 덮어도 화면이 알아서 꺼지지 않게 되기 때문에, 시스템 환경 설정에서 ‘배터리 사용 시 디스플레이 끄기’ 시간을 최소로 설정해 주었다.
기존에도 핸드폰에는 iSH 나 a-Shell 등 cli 를 제공하는 앱이 있었지만, 기능 부족과 통일되지 않은 환경이 아쉬웠다.
하지만 위의 방법은 여러 단점들에도 불구하고 핸드폰만으로 컴퓨터 자원을 직접 활용하여 동일한 환경의 cli 에 접근할 수 있다는 큰 장점을 가지고 있다.
이 글의 초안을 ssh 로 맥북에 연결한 iPad 에서 작성해보았다.
iPad 로 무선 키보드를 사용하는 것은 맥북에서와 달리 작업을 하기에 무척 불편했다.
fn 키 작동방식의 차이, 한영 전환의 차이 등 어찌 해볼 수 없는 여러 불편한 점이 있었다.
게다가 Termius 앱이 한글을 제대로 입력하지 못하는 것인지 쌍자음이 모음과 합쳐지지 않는 치명적인 문제로 인해, 결국 apple 기본 앱인 Notes 에 작성 후 복붙으로 마무리했다..
그리고, 비록 3년 넘은 6 세대 iPad 이기는 하지만, vim 을 하나만 켰을 뿐인데도 키 입력 딜레이가 꽤나 큰 것도 문제였다(대략 0.n 초).
내 아이패드에서 ssh 로 특별한 작업은 무리이고 간단히 man page 탐색 및 맥북 디스크에 데이터를 직접 기록하는 용도 정도로 사용할 만 할 것 같다.
[1] 나는 Termius 라는 앱을 사용했다.
이 때 ssh 로 맥북에 접속하기 위해서는 맥북의 IP 주소가 필요한데, 맥북의 시스템 환경설정 -> 네트워크 -> 왼쪽 탭에서 Wi-Fi 선택을 하면 오른쪽 상태 설명 창에서 맥북의 IP 주소를 확인할 수 있다(맥북에서 만든 local network 를 적용하고 나서 IP 주소가 뜨기 까지 시간이 조금 걸릴 수 있다).
[2] 반대로 정상적으로 sleep 하도록 되돌리려면 위 명령에서 1 대신 0 을 넣어주면 된다.