[G2 + Openclaw] 01. openclaw 설치와 tailscale 셋팅

기다리던 스마트 글래스(even realities G2, R1)가 도착 했다. 이제 openclaw 와 스마트글래스를 연결 해보자.

[G2 + Openclaw] 01. openclaw 설치와 tailscale 셋팅
얼마 전 해외 배송으로 기다리던 Even Glasses G2와 R1이 도착했다.
내가 원하던 웨어러블 환경을 구성할 수 있을 것 같아 구매를 서둘렀던 제품이다.
이 글은 OpenClaw 설정을 진행하며 겪었던 과정과 문제를 바라본 관점, 그리고 해결 방법을 정리해 공유하기 위한 글이다.

* 이 글은 구매 방법을 기술하지는 않는다.

기술 선택

스마트 글라스 선택 기준

  • 카메라가 없어야 한다.
    • 보안 인가가 필요할 수 있기 때문
  • 저장 장치가 없어야 한다.
    • 보안 인가가 필요할 수 있기 때문
  • 근거리 네트워크 방식이어야 한다.
    • 스마트 글라스는 화면을 표기할 용도로만 사용되어야 한다.
    • 로직은 백엔드 & 스마트폰에서 처리 되어야 한다.
  • 마이크가 있어야 한다.
    • 음성 명령을 내릴 수 있어야 한다.
  • 일반 안경이라고 우길 수 있어야 한다.
    • 대놓고 스마트안경이오~ 하는 모델은 마음에 들지 않는다.
  • 내가 마음대로 조작이 가능해야 한다.
    • 스마트글래스의 SDK or API 지원으로, 내가 앱을 만들 수 있어야 한다
  • 사람들 눈에 띄지 않게 화면을 조작 할 수 있어야 한다.
    • 눈앞에 허공에 대고 휘적휘적 하기 싫다.

위 요구사항을 모두 만족하는 제품이 Even Realities 사의 G2 + R1 이다

Even Realities | Smart Glasses & Wearable Technology
Wearable technology designed for your everyday life. Explore smart glasses and accessories that enhance your capabilities while fitting naturally into your day.
  • 카메라와 저장 장치가 없다.
  • 블루투스를 사용하고
  • 마이크가 있어, 음성명령을 내릴 수 있으며
  • 일반적인 안경과 비슷하게 생겼다.
  • 개발 도구를 지원하고 (https://hub.evenrealities.com/docs/getting-started/overview)
  • 일반 안경처럼 생겼다.
    • 실제로 일주일간 착용하고 돌아다녔을 때, 대충 보는 사람들은 안경의 정체를 알지 못했다.
    • 다만 가까이서 보면 화면을 보여줄 필름이 보이기 때문에 들킨다.
이븐 리얼리티 제품. G2 에는 2가지 기종이 있다. 참고.

완성 기준 정리

완성 기준을 정하고, 그 목표에 따라 움직여야 최소의 동선이 나온다.

  • 내 ai 서버에 연결 할 수 있어야 한다
    • 보안적으로 안전해야 한다.
    • 외부에서의 해킹 시도를 막을 수 있어야 한다.
  • 음성으로 명령을 내릴 수 있어야 한다.
    • 한국어로 명령을 내릴 수 있어야 한다.
  • 다양한 기능을 수행 할 수 있어야 한다.
    • 메일을 보낼 수 있어야 한다.
    • 캘린더를 조작 할 수 있어야 한다.

가장 현실적인 기술은 아래와 같을 것으로 보인다

셋팅 진행 과정 중 트러블슈팅

1. docker 컨테이너에서 openclaw 실행 시 tailscale 설정 문제

  • docker openclaw 설정 에서는 tailscale 설정을 진행하지 않고, 컨테이너 밖에서 처리하는 방식으로 변경

2. openclaw 에서 만든 docker-compose 결함

  • 포트 설정을 진행 하여도, 컨테이너 내부 openclaw 가 다른 포트로 변경을 진행 함.
    • openclaw 의 기본 설정으로 진행 하여도, 내부에서 openclaw 실행 순간 마음대로 변경되는 문제 발생
    • 해결 하기 위해 아래의 '포트 설정 변경 하드코딩' 문제와 똑같은 포트로 sh 스크립트에 포트 하드코딩 진행
    • 만약 문제가 발생하면 서버가 종료되어야 함
  • 포트 설정을 변경 하여도, docker-compose 에서 특정 포트(18789, 18790) 으로 하드코딩 되어 있는 문제
    • 문제를 해결하기 위해서는 openclaw 에서 설정 할 포트를 미리 알고 변경해줘야 함.
    • 하지만 위의 '포트 설정을 해도 다른 포트로 변경하는' 문제 때문에 어려움
    • 따라서 둘 중 하나의 포트를 똑같이 맞추어 강제 바인딩을 진행하여야 함

3. openclaw 가 tailscale 내부에서 접근 불가능한 문제 (화면이 뜨지 않음)

  • 최초, ip 를 Control UI origin allowlist 에 추가하여 서버 ip 를 도메인으로 가진 접근을 허용 하였으나, 문제 해결되지 않음
  • openclaw 서버 로그 확인 결과 문제 확정됨
docker compose -f <docker-compose-path>/docker-compose.yml logs --tail=200 openclaw-gateway | grep -Ei "auth|token|origin|cors|forbidden|unauthorized|401|403|control|ui|error|warn"

로그 확인 명령어

reason=control ui requires device identity (use HTTPS or localhost secure context)

확인된 로그

  • control ui 에 접근 가능한 호스트는 무조건 https or localhost 를 사용해야 한다는 정책 확인됨
  • tailscale 의 serve 설정 적용

3.1. Tailscale Serve 설정

sudo tailscale serve --bg=http://127.0.0.1:18789
  • 간단한 로그인 절차와 함께 도메인 생성 완료
  • https://<masked>.ts.net 형태로 만들어짐

3.2. Openclaw control ui 접근 인가

  • https://<masked>.ts.net 으로 접근 하여 로그인 창은 띄워졌지만, 정작 로그인은 되지 않는 문제 발생
  • openclaw 에서 cli 내부 승인 절차가 있을 수 있기 때문에 명령어 확인(웹에는 해당 기능이 보여지지 않음)
    • 명령어 발견 및 Pending 상태의 접근 요청 내용 확인
docker compose -f <docker-compose-path>/docker-compose.yml exec openclaw-gateway sh -lc 'node dist/index.js devices list'

접근자 승인 대기 목록 확인 명령어

  • 특정 토큰으로 접근 허용 처리
docker compose -f <docker-compose-path>/docker-compose.yml exec openclaw-gateway sh -lc 'node dist/index.js devices approve <request-uuid> --token "$OPENCLAW_GATEWAY_TOKEN"'

특정 pending 요청에 대한 접근 승인 명령어

4. 접근 및 로그인 성공

리눅스 서버에서 동작중인 openclaw 의 control ui 를 외부에서 접근 한 화면이다.

  • 다음 단계로 ws 연결을 안경에서 진행 해보자.