Volo 설명서
Volo는 LocalSend 규격으로 같은 네트워크(또는 Tailscale)의 컴퓨터·휴대폰과 파일·폴더·텍스트·화면 캡처를 주고받는 상주 앱입니다. 트레이에 머물면서 단축키, 텍스트 선택, 탐색기 우클릭, 화면 가장자리 선반으로 바로 보내고, 다른 기기가 보낸 것을 받습니다.
Volo란
이름 'Volo'는 라틴어·이탈리아어로 '날다'입니다. 아이콘은 검은 종이비행기이고, 트레이·창·선택 버튼·탐색기 메뉴·알림이 모두 같은 아이콘을 씁니다.
할 수 있는 일
- 보내기: 클립보드(텍스트·파일·폴더·이미지), 선택한 텍스트, 탐색기(macOS는 Finder)에서 고른 파일·폴더, 화면 캡처, 직접 쓴 메시지
- 받기: LocalSend 앱 없이 직접 받음. 텍스트는 바로 클립보드로, 파일은 저장 폴더로
- 호환: 휴대폰·다른 PC의 LocalSend 앱과 그대로 주고받음 (LocalSend 프로토콜 v2)
보내는 방법 한눈에
| 방법 | 무엇을 | 어디로 |
|---|---|---|
| Ctrl+Alt+L | 클립보드 | 기본 기기 |
| Ctrl+Alt+Shift+L | 클립보드 | 기기 선택 창에서 고름 |
| Ctrl+Alt+S | 화면 캡처한 영역 | 파란 버튼 → 목록 (Enter는 기본 기기) |
| 텍스트 드래그 | 선택한 텍스트 | 파란 버튼 → 목록 |
| 탐색기 우클릭 (macOS는 서비스 메뉴·Finder 빠른 동작) | 고른 파일·폴더 | 메뉴의 기기 |
| 가장자리 선반 | 끌어 온 파일·글자, 클립보드, 메시지 | 놓은 기기 |
| 설정 창에 끌어다 놓기 | 파일·폴더 | 기본 기기 |
설치와 실행
빌드
cargo build --release --workspace
실행 파일은 두 가지입니다. lsendw.exe는 콘솔 창 없이 도는 앱(데몬·창·탐색기 메뉴용), lsend-cli.exe는 같은 기능의 명령줄판입니다.
실행
lsendw.exe daemon또는 시작 메뉴의 Volo를 누르면 트레이에 상주합니다.- 데몬은 한 번에 하나만 돕니다. 이미 실행 중이면 "이미 실행 중입니다" 알림만 뜹니다. 설정 창·기기 선택 창·선반·캡처 창도 각각 하나만 열립니다.
- 처음 실행하면 트레이 아이콘 위치(작업 표시줄의 ^ 숨겨진 아이콘 안)를 알려 주는 안내 알림이 한 번 뜹니다.
- 데몬을 켜면 시작 메뉴에 Volo 바로가기가 만들어집니다. Windows 알림에 'Volo' 이름과 아이콘이 보이게 하기 위한 것입니다.
로그인 시 자동 실행
설정 → 일반 → 로그인 시 시작을 켜면 Windows 로그인 때 데몬이 트레이로 자동 실행됩니다 (HKCU의 Run 항목).
데몬이 함께 띄우는 것
- 전역 단축키 3개 (클립보드 전송, 기기 선택 후 전송, 화면 캡처)
- 텍스트 선택 버튼 감지
- 받기 서버
- 가장자리 선반 (
lsendw shelf자식 프로세스)
트레이 아이콘과 메뉴
트레이의 종이비행기를 왼쪽이나 오른쪽으로 누르면 각진 유리 모양 메뉴가 뜹니다. 작업 표시줄이 어두우면 아이콘이 흰색, 밝으면 검은색입니다.

| 메뉴 | 하는 일 |
|---|---|
| 클립보드 보내기 ctrl+alt+L | 클립보드 내용을 기본 기기로 (4장) |
| 기기 골라 보내기 ctrl+alt+shift+L | 기기 선택 창을 띄운 뒤 보냄 (5장) |
| 화면 캡처 ctrl+alt+S | 영역을 골라 보냄 (9장) |
| 설정 | 설정 창 (15장) |
| 종료 | 데몬·선반을 끔 |
메뉴 항목 이름은 Windows와 macOS가 같습니다. Windows는 항목마다 아이콘(클립보드, 기기, 캡처 틀, 톱니, 전원)이 있고 오른쪽에 단축키가 표시됩니다. macOS는 메뉴 막대 아이콘의 기본 메뉴입니다 (21장).
클립보드 전송 단축키
Ctrl+Alt+L을 누르면 클립보드에 있는 것을 알아서 구분해 기본 기기로 보냅니다.
- 탐색기에서 복사한 파일은 파일로, 폴더는 하위 폴더 구조를 유지한 채 보냅니다 (빈 폴더는 규격상 빠짐).
- 텍스트는 텍스트 메시지로 보냅니다. 받는 쪽이 Volo면 바로 클립보드에, LocalSend 앱이면 메시지 창으로 뜹니다.
- 기본 기기가 없으면(보낼 기기의 매번 묻기) 기기 선택 창이 뜹니다.
- Shift를 더한 Ctrl+Alt+Shift+L은 기본 기기와 상관없이 기기 선택 창을 먼저 띄웁니다 (macOS는 ⌘⇧⌥L).
- 끝나면 알림(설정에서 끌 수 있음)과 '슝' 소리, 실패하면 알림과 실패음.
단축키는 설정 → 단축키에서 바꿉니다. 단축키를 누른 순간의 클립보드 내용을 보내므로, 기기 선택 창을 띄운 사이 클립보드가 바뀌어도 처음 내용이 갑니다.
기기 선택 창
창 제목은 Volo — 기기 선택입니다. 찾은 기기가 유리판 줄로 보이고, 줄을 누르면 그 기기로 보냅니다.

- 고른 기기는 기본 기기로 저장됩니다 ("선택한 기기가 기본 기기로 저장됩니다").
- 기본 기기는 옅은 파란 유리로 표시됩니다.
- 아래쪽 새로고침 아이콘은 다시 검색, ✕ 아이콘은 취소입니다.
- Tailscale로 찾은 기기는 이름 아래에 'Tailscale'과 주소가 붙습니다.
텍스트 선택 버튼 Windows · macOS
어떤 앱에서든 텍스트를 드래그하거나 더블클릭해 고르면 그 근처에 파란 Volo로 보내기 버튼이 뜹니다.
- 버튼을 누르면 기기 메뉴가 뜹니다. 맨 위는 보낼 텍스트 미리보기(최대 30자), 그 아래 기기들(기본 기기는 파란 유리), 맨 아래 다시 검색.
- 기기를 누르면 텍스트로 보냅니다. 끝나면 알림과 효과음.


동작 방식 (Windows)
- 버튼은 눌러도 원래 앱의 선택이 풀리지 않는 창입니다. 3초가 지나면 사라지고, 마우스를 올려 두는 동안은 유지됩니다.
- 선택한 텍스트는 복사 단축키로 가져온 뒤 원래 클립보드 텍스트를 되돌려 놓습니다 (원래 내용이 이미지 등이면 되돌리지 못함).
- 텍스트 커서(I자 모양) 위에서 시작한 드래그·더블클릭에 반응합니다. 창 이동이나 파일 끌기에는 뜨지 않습니다.
- 대화 글에 화살표 커서를 쓰는 Chromium/Electron 앱(Claude 앱 등)의 본문, cmd·PowerShell·Windows Terminal의 본문에서는 화살표 커서여도 뜹니다.
- 터미널에서는 실행 중인 작업이 멈추지 않도록 Ctrl+C 대신 Ctrl+Insert(Alacritty는 Ctrl+Shift+C)로 복사합니다.
- 드래그하는 동안 창이 움직였으면(창 제목 줄 끌기) 선택으로 보지 않습니다.
- Volo 자신의 창에서는 뜨지 않습니다.
켜고 끄기: 설정 → 메뉴 → 텍스트 선택 버튼 (Windows는 기본 켬). 특정 프로그램만 빼려면 설정 파일의 popup_exclude에 실행 파일 이름을 적습니다.
macOS
macOS에서도 같은 버튼이 뜹니다. 다른 점은 아래와 같습니다.
- 기본은 꺼짐입니다. 설정 → 메뉴 → 텍스트 선택 버튼을 켜면 손쉬운 사용 권한을 요청하는 시스템 안내 창이 한 번 뜹니다. 시스템 설정 → 개인정보 보호 및 보안 → 손쉬운 사용에서 Volo를 켜세요.
- 권한이 없으면 설정 창의 그 줄에 빨간 필요함과 설정 열기 링크가 나옵니다 (화면 기록 권한 줄과 같은 모양).
- 마우스를 놓은 뒤 앞에 있는 앱의 선택한 글자를 손쉬운 사용 기능으로 읽어, 실제로 글자가 선택돼 있을 때만 버튼이 뜹니다. 창을 옮기거나 파일을 끌거나 빈 곳을 끌 때는 뜨지 않습니다.
- 암호 입력 칸과 Volo 자신의 창에서는 뜨지 않습니다.
- 선택한 글자는 버튼이 떠 있는 3초 동안만 메모리에 두고 디스크나 기록에 남기지 않습니다.
- 선택을 읽지 못하는 앱에서는 버튼을 누를 때 ⌘C로 가져오고 원래 클립보드 내용을 이미지·파일까지 그대로 되돌려 놓습니다. ⌘C는 QWERTY 자판의 C 키 위치로 보내므로 Dvorak 등 다른 자판 배열에서는 복사되지 않을 수 있습니다.
- 기기 목록은 macOS 기본 메뉴로 뜹니다.
- 권한은 앱의 코드 서명에 묶입니다. 서명이 바뀌는 빌드(
--adhoc)로 다시 설치하면 권한을 다시 줘야 할 수 있습니다. - 키보드로 고른 선택(Shift+화살표)에는 뜨지 않습니다 (Windows도 같음).
- 특정 앱을 빼려면
popup_exclude에 번들 ID(예:com.apple.Terminal) 또는 실행 파일 이름을 적습니다.
버튼을 켜지 않아도 서비스 메뉴로 선택한 텍스트를 보낼 수 있습니다 (7장).
탐색기 우클릭 메뉴 Windows · macOS
macOS의 같은 기능은 이 장 끝의 macOS: 서비스 메뉴와 Finder 빠른 동작에 있습니다. 아래는 Windows 설명입니다.
탐색기에서 파일·폴더를 고르고 우클릭하면 Volo로 보내기 ▸ 아래에 기기 목록과 기기 선택…이 나옵니다. 기기를 누르면 고른 것을 모두 보냅니다.
- 여러 개를 골라도 한 번의 전송으로 묶어 보냅니다.
- 기본 기기에는 '(기본)'이 붙습니다.
- 기기 목록은 데몬이 기기를 찾을 때마다 자동으로 갱신됩니다.
메뉴가 나오는 곳 세 군데
| 어디 | 설명 |
|---|---|
| Windows 11 새 메뉴 | '추가 옵션 표시'를 누르지 않아도 첫 메뉴에 보입니다. 서명된 셸 확장 패키지(scripts/shell-package.ps1)를 등록해야 하며, 처음 한 번 관리자 PowerShell에서 Volo 개발용 인증서를 신뢰 등록합니다. |
| 예전 메뉴 (추가 옵션 표시) | 레지스트리 메뉴로 등록됩니다. |
| 보내기(Send To) 메뉴 | 'Volo' 바로가기 — 누르면 기기 선택 창. |
켜고 끄기: 설정 → 메뉴 → 탐색기 메뉴, 또는 lsend-cli install-windows / uninstall-windows.
pwsh scripts/shell-package.ps1 # 새 메뉴 패키지 만들기·등록 pwsh scripts/shell-package.ps1 -ExeDir target\release pwsh scripts/shell-package.ps1 -Uninstall # 새 메뉴 제거
macOS: 서비스 메뉴와 Finder 빠른 동작
macOS에는 탐색기 메뉴 대신 서비스 메뉴(텍스트)와 Finder 빠른 동작(파일·폴더)이 있습니다. 설정 → 메뉴 → 서비스 메뉴를 켜거나 lsend install-mac을 실행하면 네트워크에서 기기를 찾아 항목을 만들고, 끄거나 lsend uninstall-mac을 실행하면 지웁니다.
| 어디서 | 항목 | 동작 |
|---|---|---|
| 텍스트 선택 → 우클릭 → 서비스 | Volo → <기기> | 선택한 텍스트를 그 기기로 바로 보냄 |
| Volo → 기기 선택… | 기기 선택 창을 띄운 뒤 보냄 | |
| Finder 파일·폴더 우클릭 → 빠른 동작 | Volo → 파일 보내기 | 기본 기기로 보냄 (기본 기기가 없으면 기기 선택 창) |
| Volo → <기기> (파일) | 고른 파일·폴더를 그 기기로 보냄 | |
| Volo → 기기 선택… (파일) | 기기 선택 창을 띄운 뒤 보냄 |
- 항목을 누르면 보내기는 백그라운드에서 이어지고 호출한 앱은 멈추지 않습니다 (상대가 받아 줄 때까지 기다리는 동안에도). 결과는 알림으로 보입니다.
- 데몬이 실행 중이면 기기 목록과 앱 위치가 바뀔 때 항목이 자동으로 갱신됩니다. 기기가 하나도 발견되지 않는 동안에는 기존 항목을 그대로 둡니다.
- 항목이 안 보이면 시스템 설정 → 키보드 → 키보드 단축키 → 서비스에서 켜져 있는지 확인하세요.
가장자리 선반
화면 가장자리(기본: 오른쪽 가운데)에 있는 얇은 파란 손잡이가 Volo 선반입니다. 창을 열지 않고 끌어다 놓기만으로 보냅니다.



손잡이
- 평소에는 얇은 막대(폭 10, 길이 120).
- 커서가 근처에 오면 종이비행기가 그려진 탭(폭 30, 길이 150)으로 앞으로 나오고, 누르면 선반이 열립니다. 멀어지면 다시 들어갑니다.
- 무언가를 끄는 동안에는 가장자리를 따라 보이지 않는 넓은 받는 영역(폭 40, 가장자리 길이의 60%)이 펼쳐져 근처로만 가도 열립니다. 커서가 가장자리에 가까울수록 가장자리가 파랗게 빛납니다.
- 보내는 중이면 탭이 나와 아래부터 차오르는 진행 막대를 보여 줍니다.
파일·폴더·고른 글자 끌어 놓기
- 탐색기의 파일이나 브라우저·문서에서 고른 글자를 손잡이 쪽으로 끕니다.
- 선반이 미끄러져 나오면('뽁') 원하는 기기 칸 위로 가져갑니다. 칸이 파랗게 바뀝니다.
- 놓으면 종이비행기가 날아가고('슝') 끝나면 알림과 '띵동'.
글자는 받는 쪽 클립보드로, 파일·폴더는 파일로 갑니다. 기기 칸 밖에 놓으면 "기기 위에 놓아 주세요"가 표시됩니다.
선반의 구성
- 머리: 종이비행기 + "Volo로 보내기", 오른쪽에 클립보드 아이콘
- 기기 칸: 기본 기기 → 즐겨찾기 → 나머지 순서. 기기 종류 아이콘(컴퓨터·휴대폰), 이름, 주소(#끝자리 또는 Tailscale 주소), '기본'/'선택' 표시, 연필 아이콘
- Tailscale · Volo 꺼짐: Tailscale에는 켜져 있지만 Volo/LocalSend가 응답하지 않는 기기를 흐리게 (누를 수 없음, 휴대폰은 '앱을 열면 받을 수 있음')
- 아래 한 줄: '받기 대기 중' 또는 '받기 꺼짐', 방금 보낸 결과, 보내는 중이면 진행 상황과 취소 ✕
클립보드 아이콘
| 클립보드 내용 | 아이콘 표시 |
|---|---|
| 텍스트 | T |
| 이미지 | 이미지 아이콘 (보낼 때 PNG로 저장해 보냄) |
| 파일 1개 | 파일 아이콘 |
| 파일 여러 개 | 겹친 파일 아이콘 |
| 폴더 1개 | 폴더 아이콘 |
| 폴더 여러 개 (파일과 섞인 경우 포함) | 겹친 폴더 아이콘 |
| 비어 있음 | 흐리게, 표시 없음 |
macOS는 클립보드의 형식만 확인합니다. 텍스트와 이미지는 내용을 읽지 않으므로 마우스를 올려도 미리보기 대신 "텍스트"·"이미지"로만 표시되고, 내용은 보낼 때만 읽습니다 (비밀번호 관리자가 표시한 비밀 항목은 표시하지 않음). 파일·폴더는 경로를 읽어 위 표처럼 파일 하나·여러 개·폴더·여러 폴더를 구분하고, "이름" 또는 "이름 외 N개"로 보여 줍니다.
- 끌기: 클립보드 아이콘을 집어 기기 칸에 놓으면 그 기기로.
- 더블클릭: 고른 기기로, 고른 기기가 없으면 기본 기기로.
- 마우스를 올리면 내용 미리보기("서울시 해운대구…", "회의록.pdf 외 2개").
기기 고르기
기기 칸을 한 번 누르면 '선택' 표시와 왼쪽 파란 띠가 붙습니다(기본 기기의 '기본' 표시는 흐려짐). 이 상태에서 클립보드 아이콘을 더블클릭하면 고른 기기로 갑니다. 다시 누르면 선택이 풀리고, 선반이 닫혀도 풀립니다.
연필 아이콘: 메시지 쓰기
기기 칸 오른쪽 연필을 누르면 "OO에게 보내기" 창이 선반 안쪽에 열립니다. Enter 보내기, Shift+Enter 줄바꿈, Esc 닫기.
손잡이 누르기: 최근 기록
손잡이(또는 탭)를 누르면 선반과 함께 최근 주고받은 5건이 보입니다 (무엇 · 상대 · 언제, 실패는 빨간 글씨).
닫히는 때
끌던 것이 떠나고 커서가 밖에 있으면 약 0.7초 뒤, 손잡이를 눌러 열었으면 창을 벗어나고 다른 곳을 누르면 닫힙니다. 보내는 중에는 닫히지 않습니다.
위치
| 위치 | 모양 |
|---|---|
| 오른쪽 (기본) | 오른쪽 가장자리 가운데, 선반이 왼쪽으로 나옴 |
| 왼쪽 | 왼쪽 가장자리, 오른쪽으로 나옴 |
| 위쪽 | 위쪽 가운데, 기기 칸이 가로로 |
| 아래쪽 | 작업 표시줄 바로 위 가운데(macOS는 화면 아래쪽 가장자리), 기기 칸이 가로로 |
| 커서 옆 | 손잡이 없음. 무언가를 누른 채 끌다가 잠깐 멈추면(Windows 약 0.45초, macOS 약 0.25초) 커서 오른쪽 아래(자리가 없으면 왼쪽)에 선반이 뜸. 창을 옮기는 중이면 뜨지 않음 |
설정 → 선반에서 켜고 끄고 위치를 고릅니다. 위치를 바꾸면 선반이 바로 옮겨 갑니다.
손잡이 끌어 옮기기
손잡이(또는 탭)를 누른 채 끌면(6포인트 이상 움직이면) 선반이 가장 가까운 화면의 가장자리에 붙으며 따라오고, 놓은 자리가 저장됩니다. 다른 화면·다른 가장자리로도 옮길 수 있고 Esc로 취소합니다. 움직이지 않고 누르기만 하면 선반이 열립니다. 처음에는 주 화면에 뜨고, 저장된 화면의 모니터를 분리하면 주 화면에 임시로 뜨다가 다시 연결하면 원래 화면으로 돌아옵니다. 설정 → 선반의 위치 버튼을 누르면 끌어 옮긴 위치가 해제되고 그 가장자리의 기본 위치로 돌아갑니다 (옮긴 위치를 쓰는 동안은 어느 버튼도 선택 표시가 없음).
화면 캡처 후 보내기
단축키 Ctrl+Alt+S (macOS는 Ctrl+Option+S) 또는 트레이(macOS는 메뉴 막대 아이콘) → 화면 캡처.
- 커서가 있는 화면을 찍어 그대로 깔고 살짝 어둡게 합니다 (화면이 멈춘 것처럼 보임, '딸깍').
- 끌어서 영역을 고릅니다. 고른 부분만 밝아지고 흰 점선 테두리와 크기(예: 1280 × 720)가 표시됩니다. 한 번만 누르면 화면 전체, 다시 끌면 새로 고릅니다.
- 영역 오른쪽 아래(자리가 없으면 안쪽)에 텍스트 선택 때와 같은 파란 Volo로 보내기 버튼이 뜹니다.
- 버튼을 누르면 컴퓨터 목록 — 기본 기기('기본' 표시)와 즐겨찾기가 먼저, 맨 아래 클립보드에 복사.
- 기기를 누르면 "화면 캡처 2026-10-15 14-05-03.png" 같은 이름의 PNG로 보냅니다. 진행은 선반에, 끝나면 알림·'띵동'.


- Enter: 언제든 기본 기기로 바로. 영역을 고르지 않았으면 화면 전체를 보냅니다 (기본 기기가 없으면 목록이 열림).
- Esc: 취소.
- 캡처 소리(딸깍·슝·띵동)는 설정 → 일반 → 캡처 효과음으로 끕니다.
- 목록은 최근에 확인된 기기로 먼저 보이고, 창이 뜨면 바로 다시 찾아 켜져 있는 기기로 갱신됩니다.
단축키 바꾸기·끄기: 설정 → 단축키 → 화면 캡처.
macOS: 화면 기록 권한
- 화면 캡처에는 화면 기록 권한이 필요합니다 (선반과는 별개). 첫 캡처 때 시스템 권한 창이 뜨며, 시스템 설정 → 개인정보 보호 및 보안 → 화면 기록에서 Volo를 켠 뒤 다시 캡처하세요. 권한이 없으면 캡처 화면을 띄우지 않고 안내만 합니다.
- 설정 창의 단축키 구역에 화면 기록 권한 줄이 있어 허용됨 또는 빨간 필요함과 설정 열기 링크가 보입니다.
- 권한은 앱의 코드 서명에 묶여, 서명이 바뀌는 빌드로 다시 설치하면 다시 허용해야 할 수 있습니다. macOS 15 이후는 권한이 있는 앱에 주기적으로 확인 창을 띄울 수 있습니다.
- 커서가 있는 화면 하나만 찍습니다 (화면을 가로지르는 선택과 모든 화면 동시 캡처는 아직 없음).
받기
Volo가 LocalSend 규격으로 직접 받습니다. 이 PC에 LocalSend 앱이 없어도 되고, 휴대폰·다른 PC의 LocalSend에서는 Volo가 일반 LocalSend 기기로 보입니다 (기본 이름 "컴퓨터 이름 (Volo)").
받은 것 처리
- 텍스트: 바로 클립보드에 복사하고 "OO — 텍스트를 클립보드에 복사했습니다" 알림. LocalSend처럼 '복사'를 누를 필요가 없습니다.
- 파일: 저장 위치(기본: 다운로드 폴더)에 "폴더/하위/파일" 구조를 유지해 저장. 같은 이름이 있으면
이름 (1).확장자. 큰 파일도 받는 대로 디스크에 써서 메모리를 거의 쓰지 않습니다. - 위험한 파일 이름(상위 폴더로 나가기, 드라이브 지정 등)은 막고 안전한 이름으로 저장합니다.
- 한 번에 한 전송만 받습니다 (진행 중이면 다른 전송은 잠시 거절).
묻지 않고 받기: 확인 없이 받을 범위
| 선택 | 동작 |
|---|---|
| 안 함 | 누가 보내든 매번 확인 창 |
| 즐겨찾기만 (기본) | 즐겨찾기 기기는 바로 받고, 나머지는 확인 창 |
| 모두 | 같은 네트워크의 누구든 바로 받음 |
받기 확인 창
창 제목 Volo — 받기. 보낸 기기 이름·주소, 파일 목록(최대 6개 + "외 n개", 각 크기) 또는 텍스트 미리보기가 보이고 버튼은 항상 받기, 거절, 받기입니다. '항상 받기'는 그 기기를 즐겨찾기에 넣고 다음부터 묻지 않습니다. 약 55초 안에 고르지 않으면 자동으로 거절합니다(남은 시간 표시).


PIN
설정에서 PIN을 정하면 보내는 쪽이 같은 PIN을 넣어야 받습니다.
기기 인증서
처음 받기를 켜면 자체 서명 인증서를 만들어 데이터 폴더에 둡니다. 이 인증서의 지문이 Volo의 기기 식별자이며, 보낼 때도 같은 지문으로 자신을 알립니다. 지우면 다른 기기에서 새 기기로 보입니다.
기기 찾기와 목록
찾는 방법
- 멀티캐스트 알림 (224.0.0.167:53317): "나 여기 있어"를 알리고 응답을 받음 (2초)
- 같은 대역 확인: 같은 /24 대역의 주소 254개에 하나씩 물어봄 (방화벽 인바운드 허용 없이도 됨)
- Tailscale 피어 확인: Tailscale로 보내기가 켜져 있으면 온라인 피어에 직접 물어봄
- 듣기: 받기 서버가 켜져 있으면 다른 기기가 검색할 때 보내는 신호를 듣고 목록을 갱신
- 찾은 기기는 캐시(데이터 폴더의 devices.json)에 저장되고, 하루 지난 항목은 정리됩니다
언제 찾나
- 데몬을 켤 때, 그 뒤 5분마다
- 선반을 펼칠 때·텍스트 선택 버튼이 뜰 때 (마지막 검색이 1분보다 오래됐으면)
- 설정 창·기기 선택 창·캡처 창을 열 때, 새로고침 아이콘을 누를 때
목록 규칙
- Volo 자신과 이 PC 주소로 보이는 기기(같은 PC의 LocalSend 앱 등)는 목록에서 뺍니다.
- 순서: 기본 기기 → (선반·캡처에서는 즐겨찾기) → LAN 기기 → Tailscale 기기, 각각 이름순.
- LocalSend가 알려 주는 기기 종류에 따라 휴대폰·컴퓨터 아이콘을 보여 줍니다.
- 기본 기기 판정은 이름 부분 일치(대소문자 무시)입니다.
Tailscale
설정 → 보낼 기기 → Tailscale로 보내기 (macOS는 설정 → 네트워크).
| Tailscale로 보내기 | Tailscale이 설치된 기기 | Tailscale이 없는 기기 |
|---|---|---|
| 켬 | Tailscale 주소(100.x.x.x)로만 보냄. 사설 IP는 쓰지 않음 | 사설 IP(192.x.x.x)로 |
| 끔 | 사설 IP로 | 사설 IP로 |
- 켜면 Tailscale이 있는 기기는 목록에
이름 (Tailscale 100.x.x.x)한 줄만 보입니다. - 기기 이름이나 기본 기기로 보낼 때(단축키·탐색기 메뉴 포함)도 같은 규칙이 적용됩니다.
- Tailscale에는 켜져 있지만 Volo/LocalSend가 응답하지 않는 기기는 'Tailscale · Volo 꺼짐'으로 흐리게 보입니다. 휴대폰의 LocalSend는 앱을 화면에 열어 둔 동안에만 받을 수 있습니다.
보내기 진행과 큰 파일
- 모든 보내기는 백그라운드(별도 스레드·프로세스)에서 돌아 창이 멈추지 않습니다.
- 파일은 256KB씩 읽어 보내 몇 GB여도 메모리를 거의 쓰지 않습니다. 64MB가 넘는 파일은 확인값(SHA-256) 계산을 건너뜁니다.
- 진행 상황은 어디서 보내든(선반·단축키·탐색기·선택 버튼·캡처) 선반과 설정 창에 보입니다:
회의록.pdf → OC 35% · 1.2 GB / 3.4 GB · 25 MB/s · 2분 남음 - 상대가 수락하기를 기다리는 동안은 "OC에서 수락을 기다리는 중…". 기다리는 시간은 기본 60초이고, 넘으면 "수락대기시간 60초를 초과했습니다.전송을 취소합니다."로 알리고 전송을 취소합니다. 설정 → 네트워크 → 수락 대기(초)에서 0~3600초로 바꾸고, 0이면 제한 없이 기다립니다.
- 선반 아래의 ✕나 설정 창 위쪽의 ✕로 취소할 수 있습니다 (수락 대기 중에도). 취소하면 상대 쪽 세션도 정리합니다.
보낸 기록·받은 기록
보낼 때와 받을 때마다 무엇을 · 어느 기기와 · 언제를 기록합니다 (최근 300건).
- 무엇: 텍스트면 앞부분, 파일이면 "회의록.pdf 외 2개 · 파일 12개 · 3.4 MB", 폴더는 폴더 이름
- 어디: 보냄
→ 기기, 받음← 기기 - 언제: 오늘 14:05 · 어제 09:12 · 10월 13일 18:40 (마우스를 올리면 "3분 전")
- 보내기 실패는 빨간 글씨로 이유 표시 (거부, 상대가 다른 전송 처리 중, 취소함 등)
- 버튼: 텍스트는 다시 복사, 파일은 폴더에서 보기
설정 창의 보내기 탭에 보낸 기록, 받기 탭에 받은 기록이 따로 있고 각각 지우기로 비웁니다. 선반에는 손잡이를 눌렀을 때 최근 5건이 보입니다. 보내는 프로세스와 받는 데몬이 동시에 써도 잃지 않도록 기록 파일을 잠가서 씁니다.
설정 창
트레이 → 설정… (창 제목 Volo — 설정). 위쪽 탭 세 개로 나뉩니다. 바꾸는 즉시 저장되고 데몬·선반이 바로 반영합니다 (아래에 "저장했습니다" 또는 오류 표시).
설정 탭
모든 설정 항목. 16장에 하나씩 설명합니다.
보내기 탭
- 보낸 기록 목록과 지우기
- 이 창에 파일·폴더를 끌어다 놓으면 기본 기기로 바로 보냅니다 (기본 기기가 없으면 안내)

받기 탭
- 상태 카드: 이 기기 이름, 주소 끝자리(#x), "받을 준비 완료 · 포트 53317 · HTTPS" 또는 꺼짐·응답 없음 안내
- 받은 기록 목록, 저장 폴더 열기, 지우기

위쪽 진행 표시
보내는 중이면 탭 아래에 진행 막대·문구·취소 버튼이 나옵니다.
설정 항목 전체
설정 탭에 위에서부터 이 순서로 있습니다.


일반
| 항목 | 설명 | 기본 |
|---|---|---|
| 로그인 시 시작 | 로그인 때 데몬을 트레이(macOS는 메뉴 막대)로 자동 실행. Windows는 HKCU의 Run 항목, macOS는 LaunchAgent(다음 로그인부터 적용) | - |
| 알림 | 보내기 완료·받기 알림. 실패 알림은 항상 표시 | 켬 |
| 효과음 | 모든 효과음(뽁·딸깍·슝·띵동·실패음) 켜고 끄기 | 켬 |
| 캡처 효과음 | 화면 캡처 때의 소리('딸깍', '슝', '띵동')만 따로 끄기. 효과음이 꺼져 있으면 함께 꺼지고 회색으로 보임 | 켬 |
선반
| 항목 | 설명 | 기본 |
|---|---|---|
| 화면 가장자리에 표시 | 선반 켜고 끄기. 아래에 "파일이나 글자를 가장자리로 끌면 열립니다" 안내 | 켬 |
| 위치 | 오른쪽 · 왼쪽 · 위쪽 · 아래쪽 · 커서 옆. 손잡이를 끌어 옮긴 위치를 쓰는 동안은 어느 버튼도 선택 표시가 없고 "옮긴 위치 사용 중 · 누르면 기본 위치로" 안내가 나오며, 아무 버튼이나 누르면 그 가장자리의 기본 위치로 돌아감 (8장) | 오른쪽 |
보낼 기기
Windows는 설정 탭에 이 구역이 있습니다. macOS는 이 구역이 보내기 탭의 맨 위에 있고, 설정 탭에는 없습니다. 'Tailscale로 보내기' 스위치도 macOS에서는 설정 탭의 '네트워크' 구역에 있습니다.
| 항목 | 설명 |
|---|---|
| 근처 기기 + 다시 찾기 아이콘 | 지금 찾은 기기 목록. 새로고침 아이콘(다시 찾기)으로 다시 검색 |
| 매번 묻기 | 기본 기기 없이, 보낼 때마다 기기 선택 창을 띄움 |
| 기기 줄 누르기 | 그 기기를 기본 기기로 정함 (옅은 파랑). 단축키·탐색기 메뉴·선택 버튼·캡처의 Enter가 이 기기로 감 |
| 별 | 즐겨찾기 — 이 기기가 보내면 '묻지 않고 받기'가 '즐겨찾기만'일 때 묻지 않고 받음 |
| Tailscale · 꺼진 기기 | Tailscale에 켜져 있지만 응답하지 않는 기기 (보기만. 'Tailscale로 보내기'가 켜져 있을 때 보임) |
| Tailscale로 보내기 | 12장의 규칙. "켜면 Tailscale 기기는 Tailscale 주소로 보냅니다" |
받기
| 항목 | 설명 | 기본 |
|---|---|---|
| 받기 허용 | 받기 서버 켜고 끄기 | 켬 |
| 묻지 않고 받기 | 안 함 · 즐겨찾기만 · 모두 (10장). 아래에 "매번 묻습니다" / "즐겨찾기 기기만 바로 받습니다" / "모두 바로 받습니다" 안내 | 즐겨찾기만 |
| 저장 위치 | 누르면 폴더 고르기, ✕로 다운로드 폴더로 되돌리기 | 다운로드 |
| PIN | 비우면 PIN 없음 (칸을 벗어나면 반영) | 없음 |
| 즐겨찾기 | 즐겨찾기 기기 목록(있을 때만 보임), ✕로 빼기 | - |
단축키
| 항목 | 설명 | 기본 |
|---|---|---|
| 클립보드 보내기 | 조합 상자나 옆의 연필 아이콘을 누르고 새 조합을 누름. Ctrl/Alt(macOS는 Cmd/Option) 포함 필수. 입력 중에는 아이콘이 ✕로 바뀌어 누르면 취소되고 Esc도 취소. 다른 단축키와 같은 조합은 "이미 쓰는 단축키입니다"로 받지 않음 | ctrl+alt+L (macOS Cmd+Shift+L) |
| 기기 골라 보내기 | 기본은 위 단축키에 수식키를 더한 조합 (Windows는 +Shift, macOS는 +Option). 같은 방법으로 직접 정할 수도 있고, 직접 정하면 옆에 기본값 링크가 생겨 되돌립니다 (설정 파일의 picker_hotkey) | ctrl+alt+shift+L (macOS Cmd+Shift+Option+L) |
| 화면 캡처 | 같은 방법으로 변경, 비우면 "꺼짐" | ctrl+alt+S |
| 화면 기록 권한 (macOS 전용) | 화면 캡처에 필요한 권한 상태. 허용되면 "허용됨", 없으면 빨간 '필요함'과 '설정 열기' 링크 (9장) | - |
메뉴
| 항목 | 설명 | 기본 |
|---|---|---|
| 텍스트 선택 버튼 | 6장. 텍스트를 선택하면 'Volo로 보내기' 버튼을 표시 | Windows 켬 / macOS 끔 |
| 손쉬운 사용 권한 (macOS 전용) | macOS에서 '텍스트 선택 버튼'을 켰는데 권한이 없을 때만 나오는 줄. 빨간 '필요함'과 '설정 열기' 링크. 스위치를 켜는 순간 시스템 권한 안내 창이 한 번 뜸 | - |
| 탐색기 메뉴 (Windows) / 서비스 메뉴 (macOS) | 7장. Windows는 탐색기 우클릭 메뉴(Volo로 보내기 → 기기), macOS는 서비스 메뉴·Finder 빠른 동작 | - |
네트워크
알림과 효과음
알림은 Windows 알림 센터에 'Volo' 이름과 종이비행기 아이콘으로 뜹니다.

| 소리 | 언제 |
|---|---|
| 뽁 | 선반이 열릴 때, 메시지 창이 열릴 때 |
| 딸깍 | 기기 고르기, 클립보드 아이콘 집기, 캡처 시작·영역 선택, 취소 |
| 슝 | 보내기 시작(선반·캡처), 단축키·메뉴 보내기 완료, 받기 완료 |
| 띵동 | 선반·캡처에서 보내기 완료, 클립보드에 복사 완료 |
| 실패음 (띠-롱) | 보내기 실패 |
소리는 외부 음원 없이 코드로 합성합니다. 설정 → 일반 → 효과음으로 모두 끄고, 캡처 효과음으로 캡처 때 소리만 끕니다.
명령줄 (lsend-cli)
| 명령 | 하는 일 |
|---|---|
discover | 네트워크의 기기 목록 (이름, 지문, 주소) |
send [파일·폴더…] | 보내기. --to 이름|IP|IP:포트, --picker(기기 선택 창), --clipboard, --text "…"(-면 표준 입력) |
daemon | 트레이 상주 시작 |
settings | 설정 창 |
open settings|send|receive | 설정 창의 그 탭 |
capture | 화면 캡처 후 보내기 (Windows·macOS) |
install-windows / uninstall-windows Windows | 탐색기 메뉴·보내기 메뉴 등록·제거 (제거 시 시작 메뉴 바로가기도) |
install-mac / uninstall-mac macOS | 서비스 메뉴·Finder 빠른 동작 등록·제거 |
앱이 안에서 쓰는 숨은 명령: shelf(선반), receive-prompt(받기 확인 창), ui-preview Windows, export-logos. 다른 OS에서 Windows 전용·macOS 전용 명령을 실행하면 "…은 Windows 전용입니다"처럼 알려 줍니다.
진단용 환경 변수
| 변수 | 효과 |
|---|---|
LSEND_DEBUG=1 | 선택 버튼 감지·선반 끌어다 놓기 과정을 기록 (Windows·macOS 공통). macOS의 선택 버튼은 선택한 글자 대신 글자 수만 기록 |
LSEND_DRY_RUN=1 | 실제로 보내지 않고 무엇을 어디로 보낼지만 출력 |
LSEND_THEME=mac | 창 모양을 macOS 네이티브 스타일로 |
LSEND_DATA_DIR=경로 | 데이터 폴더 바꾸기. 설정 파일(config.yaml)도 이 폴더 안의 것을 읽고 씁니다 |
설정 파일 config.yaml
%APPDATA%\lsend\config.yaml (macOS: ~/.config/lsend/config.yaml, LSEND_DATA_DIR을 지정하면 그 폴더 안) — 설정 창에서 바꾸는 것을 권장합니다.
default_device: "OC" # 기본 기기 (이름 부분 일치 또는 IP), 비우면 매번 선택
hotkey: "ctrl+alt+L" # 클립보드 전송
picker_modifier: "shift" # 핫키 + 이 키 = 기기 선택 후 전송 (macOS 기본 "alt")
# picker_hotkey: "ctrl+alt+P" # 기기 선택 후 전송을 직접 정할 때 (비우면 위 조합)
capture_hotkey: "ctrl+alt+S" # 화면 캡처 후 보내기 (비우면 끔)
accept_timeout_secs: 60 # 상대가 수락하기를 기다리는 최대 시간(초). 넘으면 전송 취소, 0이면 제한 없음
notify: true # 완료 알림
sound: true # 효과음
capture_sound: true # 캡처 효과음 (sound가 켜져 있을 때만)
cache_ttl_minutes: 5 # 기기 캐시 유효 시간
selection_popup: true # 텍스트 선택 버튼 (기본: Windows 켬 / macOS 끔)
popup_exclude: [] # 선택 버튼을 띄우지 않을 앱 (실행 파일 이름, macOS는 번들 ID도 가능)
tailscale: false # Tailscale로 보내기
receive: true # 받기
alias: null # 다른 기기에 보이는 이름
port: 53317 # 받기 포트
encryption: true # HTTPS
quick_save: favorites # off | favorites | on
save_dir: null # 비우면 다운로드 폴더
pin: null
favorites: # 즐겨찾기 기기 (항상 받기·별)
- fingerprint: "…"
alias: "HaeundaeN2"
shelf: true # 선반
shelf_position: right # right | left | top | bottom | cursor
# shelf_anchor: # 손잡이를 끌어 옮긴 위치 (선반이 저장함, 위치 버튼을 누르면 지워짐)
# screen: { name: "…", x: 0, y: 0, w: 1920, h: 1080 }
# along: 0.5 # 가장자리를 따라간 위치 (0.0~1.0)
데이터 폴더
%APPDATA%\lsend\ (macOS: ~/.config/lsend/)
| 파일 | 내용 |
|---|---|
config.yaml | 설정 |
devices.json | 찾은 기기 캐시 |
history.json | 보낸 기록·받은 기록 |
identity.der, identity.key | 받기용 기기 인증서 (지문 = 기기 식별자) |
transfers\ | 진행 중인 보내기 상태·취소 요청 (끝나면 지워짐) |
shell-menu.json Windows | Windows 11 새 우클릭 메뉴의 기기 목록 |
volo.ico, volo-notify.png Windows | 메뉴·바로가기·알림 아이콘 |
.shelf-announced macOS | 선반이 처음 뜰 때의 안내 알림을 이미 냈다는 표시 (있으면 다시 알리지 않음) |
.capture-hotkey-notice macOS | 빈 캡처 단축키가 저장된 옛 설정에 켜는 방법을 이미 알렸다는 표시 |
.selection-popup-init macOS | 텍스트 선택 버튼 기본값(끔)을 이미 적용했다는 표시. 스위치가 숨겨져 있던 때 저장된 켬 값을 처음 한 번만 끔으로 바꿉니다 |
*.lock | 한 번에 하나만 실행하기 위한 잠금 |
macOS
- 메뉴 막대 아이콘(템플릿 아이콘, Dock 아이콘 없음)과 메뉴: 클립보드 보내기, 기기 골라 보내기, 화면 캡처, 설정, 종료
- 단축키 기본값 ⌘⇧L, 기기 선택은 + ⌥, 화면 캡처는 Ctrl⌥S. 단축키에는 손쉬운 사용 권한이 필요 없습니다 (반응이 없으면 다른 앱이 같은 조합을 쓰는지 확인)
- 우클릭 → 서비스 메뉴와 Finder 빠른 동작: "Volo → 기기" 항목, "Volo → 파일 보내기", "Volo → 기기 선택…" (7장,
install-mac) - 가장자리 선반 (8장)과 화면 캡처 후 보내기 (9장)도 됩니다. 선반은 별도 권한이 필요 없고, 캡처는 화면 기록 권한이 필요합니다.
- 텍스트 선택 버튼도 있지만 기본은 꺼짐이고 손쉬운 사용 권한이 필요합니다 (6장).
- 로그인 자동 실행은 LaunchAgent로
- 창은 macOS 시스템 설정 앱 같은 네이티브 모양
- 받기 서버, 설정 창, 기록은 공통
처음 실행할 때 나오는 권한 창
| 권한 | 이유 | 허용하지 않으면 |
|---|---|---|
| 로컬 네트워크 (macOS 15 이상) | 같은 네트워크의 기기 찾기 | 기기 목록이 조용히 빔 → 시스템 설정 → 개인정보 보호 및 보안 → 로컬 네트워크에서 Volo 켜기 |
| 수신 연결 허용 (방화벽이 켜져 있을 때) | 다른 기기가 보낸 파일 받기 | 받기가 안 됨 |
| 다운로드 폴더 | 받은 파일 저장 | 저장이 실패함 |
| 화면 기록 | 화면 캡처 (9장) | 캡처 화면 없이 안내만 하고 끝남 |
| 손쉬운 사용 | 텍스트 선택 버튼을 켰을 때만 (6장) | 선택 버튼이 뜨지 않음 |
권한은 앱의 코드 서명에 묶입니다. 같은 인증서로 다시 빌드하면 승인이 유지되지만, --adhoc 서명 빌드는 빌드마다 승인이 초기화될 수 있습니다. 자세한 설치·빌드 방법은 docs/install-mac.md를 보세요.
알아 둘 점과 문제 해결
- LocalSend와 포트 충돌: 이 PC의 LocalSend가 53317을 쓰고 있으면 Volo 받기가 켜지지 않습니다 → LocalSend를 끄거나 포트 변경.
- "상대 기기가 다른 전송 세션을 처리 중": 상대 LocalSend에 끝나지 않은 전송(수락 창)이 걸려 있음 → 상대 기기에서 수락·거절하거나 앱을 다시 켬.
- 관리자 창: 텍스트 선택 버튼이 뜨지 않음 (Windows 보안).
- macOS에서 기기 목록이 비어 있음: 로컬 네트워크 권한을 허용했는지 확인 (시스템 설정 → 개인정보 보호 및 보안 → 로컬 네트워크).
- 휴대폰: LocalSend 앱을 화면에 열어 둔 동안에만 받음.
- 목록에 안 보이는 기기: 상대 Volo/LocalSend가 꺼져 있거나 방화벽이 막음. Tailscale 기기는 'Volo 꺼짐' 목록에서 확인.
- 같은 기기가 두 번: LocalSend 이름과 Tailscale 이름이 다르면 와이파이 쪽과 'Volo 꺼짐' 쪽에 따로 보일 수 있음.
- 보안 프로그램: AdGuard 같은 프로그램이 연결을 가로채면 일부 기기로 안 갈 수 있음.
- Windows 11 새 메뉴가 안 보이면: 인증서 신뢰 등록 후
shell-package.ps1을 다시 실행하고, 그래도 안 보이면 탐색기를 다시 시작. - 진단:
LSEND_DEBUG=1로 실행해 기록 확인.
제거
- 설정 → 일반 → 로그인 시 시작 끄기
lsend-cli uninstall-windows— 탐색기 메뉴, 보내기 메뉴, 시작 메뉴 바로가기 제거pwsh scripts/shell-package.ps1 -Uninstall— Windows 11 새 메뉴 패키지 제거 (등록했다면)- 트레이 → 종료
- 필요하면 데이터 폴더
%APPDATA%\lsend\삭제
macOS: 설정 → 로그인 시 시작 끄기 → lsend uninstall-mac(서비스 메뉴·빠른 동작 제거) → 메뉴 막대 → 종료 → Volo.app 삭제. 필요하면 데이터 폴더 ~/.config/lsend/도 지웁니다.