CLIEN

본문 바로가기 메뉴 바로가기 보기설정 테마설정
톺아보기 공감글
커뮤니티 커뮤니티전체 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 ·굴러간당 ·주식한당 ·아이포니앙 ·MaClien ·방탄소년당 ·일본산당 ·개발한당 ·자전거당 ·이륜차당 ·소시당 ·AI당 ·패스오브엑자일당 ·안드로메당 ·나스당 ·클다방 ·바다건너당 ·걸그룹당 ·사과시계당 ·물고기당 ·전기자전거당 ·노젓는당 ·노키앙 ·가상화폐당 ·곰돌이당 ·윈폰이당 ·축구당 ·키보드당 ·리눅서당 ·IoT당 ·창업한당 ·소셜게임한당 ·여행을떠난당 ·골프당 ·콘솔한당 ·디아블로당 ·찰칵찍당 ·3D메이킹 ·X세대당 ·ADHD당 ·AI그림당 ·날아간당 ·육아당 ·배드민턴당 ·야구당 ·농구당 ·블랙베리당 ·비어있당 ·FM당구당 ·블록체인당 ·보드게임당 ·활자중독당 ·볼링친당 ·캠핑간당 ·냐옹이당 ·문명하셨당 ·클래시앙 ·요리한당 ·쿠키런당 ·대구당 ·DANGER당 ·뚝딱뚝당 ·개판이당 ·동숲한당 ·날아올랑 ·e북본당 ·갖고다닌당 ·이브한당 ·패셔니앙 ·도시어부당 ·FM한당 ·맛있겠당 ·포뮬러당 ·젬워한당 ·안경쓴당 ·차턴당 ·총쏜당 ·땀흘린당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·KARA당 ·꼬들한당 ·덕질한당 ·어학당 ·가죽당 ·레고당 ·LOLien ·Mabinogien ·임시소모임 ·미드당 ·밀리터리당 ·땅판당 ·헌팅한당 ·오른당 ·영화본당 ·MTG한당 ·소리당 ·적는당 ·방송한당 ·PC튜닝한당 ·그림그린당 ·소풍간당 ·심는당 ·라즈베리파이당 ·품앱이당 ·리듬탄당 ·달린당 ·Sea마당 ·SimSim하당 ·심야식당 ·윈태블릿당 ·미끄러진당 ·나혼자산당 ·스타한당 ·스팀한당 ·파도탄당 ·퐁당퐁당 ·테니스친당 ·테스트당 ·빨콩이당 ·공대시계당 ·터치패드당 ·트윗당 ·VR당 ·시계찬당 ·WebOs당 ·위스키당 ·와인마신당 ·WOW당
임시소모임
고객지원
  • 게시물 삭제 요청
  • 불법촬영물등 신고
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
© CLIEN.NET
공지[점검] 잠시후 서비스 점검을 위해 약 30분간 접속이 차단됩니다. (금일 18:15 ~ 18:45)

MaClien

맥당이야기 Mac을 RDP로 원격 제어 할 수 있는 프로그램을 만들고 있습니다 (2) 23

12
2023-02-06 15:11:44 수정일 : 2023-02-06 15:26:43 58.♡.55.51
cheesekun

Screenshot_20230206_142307.png


LINK


https://www.clien.net/service/board/cm_app/17323600CLIEN 글을 쓴 뒤로 한동안 다른 일을 하느라 바빴는데, 최근에서야 시간이 조금씩 나게 되어서 진척 상황을 공유 드립니다.


동시 세션 지원

177117047-e3736a11-1227-429e-b840-cd36b8881687.png


177754283-abf904e8-c733-498d-8ba8-1a7ec90f735d.png


Windows Server의 터미널 서비스처럼 1대의 맥을 여러 사용자가 동시에 사용할 수 있도록 하는 방법을 찾아냈고, 

이를 더욱 안정화 시켜서 Mac Pro같은 고성능 컴퓨터를 터미널 서버로써 활용할 수 있도록 하는 것을 목표로 하고 있습니다.



x86용 RemoteFX 코덱을 M1 (arm64)로 포팅

xrdp는 RemoteFX 인코더 라이브러리 (librfxcodec)가 동봉되어 있기 때문에 클라이언트가 지원하는 경우 대역폭을 절약하면서도 빠른 화면 갱신이 가능합니다. 

하지만, librfxcodec의 주요 부분에서 x86 어셈블리를 사용한 SIMD 가속을 받도록 되어 있기 때문에, M1 계열 칩이 달린 Mac에서는 제 속도가 나오지 않는다는 문제가 있습니다.


이를 어떻게든 해결해 보고 싶었지만 어셈블리는 뭐 하는지 대충 읽을 줄이나 알지, 짤 줄은 하나도 몰랐기 때문에,


Screenshot_20230206_144915.png

이런 x86 SSE 어셈블리 코드를...


Screenshot_20230206_145040.png

ARMv8 (NEON)에서 최대한 똑같이 동작하는 인스트럭션을 찾아서..


Screenshot_20230206_145112.png

어셈블리 코드를 그대로 C언어로 변환(?)한 뒤 xrdp측에 PR을 날렸습니다. 

사실 이런 정신나간 코드를 받아줄지는 잘 모르겠습니다만, SIMD 가속이 없는 것 보다는 CPU 사용량도 확연히 줄고, 속도도 엄청나게 빨라짐을 확인할 수 있었습니다.



추후 해야 할 일

제가 권한을 가지고 있는지 잘 모르겠어요..

녹화 권한을 가지고 있지 않으면, 이를 시스템 설정에서 부여할 수 있도록 안내하는 다이얼로그를 만들고 싶은데, 제 프로그램이 macOS에서 특정 권한을 가지고 있는지 체크하는 방법을 잘 모르겠습니다. 

Android처럼 여러 권한 체크를 한가지 function을 호출해서 확인할 수 있는게 아닌 것 같더라구요..


사람들에게 배포는 했다고 쳐, 그런데 제거는?

인스톨러는 어떻게 만드는지 감을 잡았는데, 언인스톨러를 어떻게 제공해야 할지 모르겠습니다.

보통 macOS용 프로그램들은 언인스톨러가 어떤 식으로 제공되나요?







cheesekun 님의 게시글 댓글
  • 주소복사
  • Facebook
  • X(Twitter)
댓글 • [23]
삭제 되었습니다.
ifmkl
IP 211.♡.244.129
02-06 2023-02-06 15:29:09
·
오 정말 최곱니다!
splendare
IP 106.♡.130.45
02-06 2023-02-06 15:29:38
·
응원합니다!!
LinkeneitoR
IP 210.♡.105.1
02-06 2023-02-06 15:37:24
·
와우 게임도 돌아갈만큼 빠른가요 ㅎㅎ 기대됩니다
Javaxml
IP 172.♡.94.11
02-06 2023-02-06 16:10:19
·
와우~ 멋지네요!
한가지 질문이 있습니다.
Windows RDP는 여타 원격제어 프로그램에 비해 월등한 속도와 품질을 자랑하는데요.
그 원리가 비트맵을 보내는(압축이든 아니든) 것이 아니라 (가능한 경우, Windows 구성요소)컨트롤만 주고받고 렌더링을 Client 측에서 하기 때문인것으로 알고 있습니다.
(뭘 제대로 알고 있는 것은 아니고요, 대충 그렇다더라 라고 알고 있습니다)

그런데 맥에 입문하고 보니 맥용은 그런 방식이 아니라 비트맵을 압축해서 보내는 것 같더라고요.
(맞나요?)
1. 맞다면 왜 그런것인지?
2. 그리고 님께서 만들고 계신 것을 왜 다른 개발자들은 안 만든것인지?
다른 개발자들이 실력과 기술이 없어서는 아닐것 같은데요.
궁금합니다.
cheesekun
IP 58.♡.55.51
02-06 2023-02-06 16:31:40
·
@Javaxml님

1. RDP도, macOS 내장 VNC도 비트맵을 압축해서 보내는 것은 똑같습니다. 하지만, RDP의 경우 한정된 대역폭 안에서 효율적인 멀티미디어 전송을 위해 RemoteFX나 H.264 코덱을 사용해서 손실 압축을 하고 있는 것으로 알고 있습니다.

추가적으로 Windows의 경우 원격 접속 시 배경화면을 보여주지 않거나, 애니메이션을 줄이거나, 창 드래그 시 내용은 보여주지 않거나.. 하는 식으로 추가적인 최적화가 되어 있습니다.

2. 이미 macOS 내장 VNC 말고도 TeamViewer나 Chrome Remote Desktop같은 훌륭한 대체재가 있습니다. 하지만, 전자는 개인 사용 목적이 아니면 도입 비용이 만만치 않고, 후자는 컴퓨터가 구글 계정과 묶이는 것이 조금 찝찝하다는 문제가 있어서, 이걸 해결해보고자 취미삼아 만들게 되었습니다.
Javaxml
IP 172.♡.95.25
02-07 2023-02-07 09:47:08
·
@cheesekun님
아~ 그렇군요.. RDP 실망인걸요 ^^
좋은 시도 감사합니다.
출시되면 사용자가 되겠습니다~
macprenew
IP 221.♡.172.154
02-06 2023-02-06 22:27:00
·
훌륭하십니다!!
콘사인
IP 222.♡.150.165
02-06 2023-02-06 22:43:48
·
와... 이정도면 유료로 앱 팔아도 될 것 같아요
니속사정
IP 211.♡.160.56
02-07 2023-02-07 09:21:19
·
NuoRDS 유료로 구매했었는데 얼마나 빠를지 궁금합니다.
엉클머리
IP 220.♡.180.115
02-07 2023-02-07 09:27:01
·
가상 디스플레이로 미러링 받은 걸 인코딩해서 전송하는 방식은 고려해보셨었나요?
cheesekun
IP 58.♡.55.51
02-08 2023-02-08 23:55:14
·
@엉클머리님 앗, 가상 디스플레이를 만들 수 있는 방법이 혹시 있을까요..? 지금은 무조건 메인 디스플레이를 따라가서 사용자의 원격 제어 내용이 보이는 문제가 있습니다.. ㅠㅜ
엉클머리
IP 220.♡.180.115
02-09 2023-02-09 13:33:15 / 수정일: 2023-02-09 13:35:47
·
@cheesekun님 그 문제라면 소용 없을 듯 싶습니다. 가상 모니터가 미러링 해서 화면을 전송하니까, 동일하게 호스트에서 조작하는 게 보일겁니다. 미러링 하지 않게 처리해도 마우스 조작에 간섭을 받겠습니다. 프로세서가 확실하게 지원하는지 알 수 없다면 SIMD 처리는 아예 빼버린 모양이군요. 그렇더라도 CPU로라도 사용하느냐 안하느냐는 차이가 큰가봅니다.
cheesekun
IP 58.♡.55.51
02-10 2023-02-10 16:44:09
·
첫 릴리즈는 했지만 아직까지는 설치 과정이 복잡한 상황입니다..
설치가 간단해지면 완전한 인스톨러를 들고 그때 다시 찾아오도록 하겠습니다!
cheesekun
IP 58.♡.55.51
02-10 2023-02-10 16:44:58
·
(복잡하지만 직접 설치해보고 싶으신 분은 https://github.com/team-unstablers/ulalaca/releases/tag/0.0.0-test 하고 https://github.com/neutrinolabs/xrdp/wiki/%5BWIP%5D-xrdp-on-macOS-(with-ulalaca) 를 확인해 주세요!)
하늘처럼v
IP 112.♡.21.56
02-18 2023-02-18 17:01:44 / 수정일: 2023-02-18 17:02:03
·
@cheesekun님 안녕하세요! 지금 저에게 너무 필요했던 툴이었는데 멋지십니다!
알려주신 사이트들 참고하여 app들 빌드하고 설치까지 완료하였는데요. 접속이 여전히 안되어 제가 놓친 부분이 있을가 하여 문의드립니다.


m1pro MacBook이고, iPad 에서 RDClient로 접속하려고 했는데 에러가 납니다.
사용자 계정은 ssh 접속할때 사용하는 계정으로 했는데 이게 아닐까요?
하늘처럼v
IP 112.♡.21.56
02-18 2023-02-18 17:02:15 / 수정일: 2023-02-18 17:37:20
·
@cheesekun님
느낌으로 봤을땐 xrdp가 제대로 시작이 안된거같은데 한번 같이 봐주시면 감사하겠습니다

❯ ls /opt/xrdp/bin
xrdp-dis xrdp-genkeymap xrdp-keygen xrdp-sesadmin xrdp-sesrun

❯ sudo launchctl print org.xrdp.xrdp
\Unrecognized target specifier.
Usage: launchctl print <domain-target> | <service-target>
<service-target> takes a form of <domain-target>/<service-id>.
Please refer to `man launchctl` for explanation of the <domain-target> specifiers.
cheesekun
IP 125.♡.30.212
02-18 2023-02-18 17:52:41 / 수정일: 2023-02-18 17:56:34
·
@하늘처럼v님

안녕하세요!
우선, 액티비티 모니터(한국어로는 뭐라고 되어 있는지 모르겠네요 ㅠㅠ)에서 xrdp가 켜져있는지 확인하거나, 터미널에서 `ps aux | grep xrdp` 를 입력하면 xrdp가 켜져있는지 확인하실 수 있습니다.

launchd 서비스로 xrdp를 등록하신 경우 `sudo launchctl print system/org.xrdp.xrdp` 명령이 아마 동작할 것 같습니다.

수동으로 xrdp를 실행해 보시려면 터미널에서 `sudo /opt/xrdp/sbin/xrdp -n`을 입력하시면 됩니다. (Ctrl + C로 종료가 가능할 것입니다)
cheesekun
IP 125.♡.30.212
02-18 2023-02-18 17:55:26 / 수정일: 2023-02-18 17:56:06
·
@하늘처럼v님
추가적으로, iPadOS / iOS의 Microsoft Remote Desktop 앱으로 접속하시는 경우, https://github.com/neutrinolabs/xrdp/wiki/%5BWIP%5D-xrdp-on-macOS-(with-ulalaca) 에서 'with VideoToolbox Support' 가 붙어있는 방법으로 설치하시는 것을 권해드립니다. 기본 상태로 설치되는 xrdp에서는 아직 iOS 버전에서 사용하는 NSCodec나 GFX 파이프라인 (H.264) 지원이 붙지 않아서, 무압축으로 데이터가 오가기 때문에 엄청나게 느리면서 많은 대역폭을 사용할 수 있습니다.
하늘처럼v
IP 112.♡.21.56
02-18 2023-02-18 20:45:28 / 수정일: 2023-02-18 21:01:25
·
@cheesekun님 아! 감사합니다 역시 데몬으로 등록하는 과정이 뭔가 잘못됐나보군요. 수동으로 실행하니 접속 시도는 되는 것 같습니다. launchd 서비스로 xrdp는 어떻게 등록하는지 아시나요..?
현재는 github wiki에 있는/etc/xrdp/xrdp.ini만 내용 추가한게 전부인데, 뭔가 빠진것같아서요 ㅎㅎ..

그리고 중요한 문제는.. 접속 시도를 하면 이와같은 에러가 나네요.. 혹시 이런 경험하신적있으신가요?

[20230218-20:44:17] [WARN ] Ignoring obsolete SCP port value '3350'
[20230218-20:44:20] [ERROR] xrdp_wm_log_msg: Error connecting to sesman on sesman.socket
[20230218-20:44:20] [INFO ] Error connecting to sesman on sesman.socket
[20230218-20:44:21] [INFO ] dynamic_monitor_data:
[20230218-20:44:21] [INFO ] dynamic_monitor_data: msg_type 2 msg_length 56
[20230218-20:44:21] [WARN ] libxrdp_process_monitor_stream: physical_width is not within valid range. Setting physical_width to 0mm, Setting physical_height to 0mm, physical_width was: 0
[20230218-20:44:21] [WARN ] libxrdp_process_monitor_stream: physical_height is not within valid range. Setting physical_width to 0mm, Setting physical_height to 0mm, physical_height was: 0
cheesekun
IP 59.♡.200.88
02-18 2023-02-18 20:53:37
·
@하늘처럼v님 /etc/xrdp/xrdp.ini가 올바르게 설정되어 있지 않은 것 같습니다.

[Ulalaca]
name=Ulalaca
lib=libulalaca.dylib
username=ask
password=ask

위와 같은 세션 타입 엔트리가 설정 파일에 추가되어 있는지 확인해 주세요! (가급적이면 세션 타입 맨 위에 추가해 주세요.)
cheesekun
IP 59.♡.200.88
02-18 2023-02-18 20:54:38
·
@하늘처럼v님 혹시 VideoToolbox 서포트 붙은 버전으로 설치하셨으면, fork=true도 false로 바꿔주세요.
하늘처럼v
IP 112.♡.21.56
02-18 2023-02-18 21:10:11 / 수정일: 2023-02-18 21:13:27
·
@cheesekun님 빠른 답변 감사합니다! 말씀하신 것처럼 xrdp.ini 문제인가 보네요.
session type 위로 올리니 연결은 되는 것 같습니다!
다만.. 화면이 하늘색인것과, 바로 segfault로 죽는점이 문제이네요 ㅠㅠ

### terminal 내용 ###
# fork=true일때 session 연결된 후 시간이 조금 지난 후 생긴 에러
❯ sudo /opt/xrdp/sbin/xrdp -n
libc++abi: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc

# fork=false로 했을때 session 연결하자마자 바로 죽는 상황
❯ sudo /opt/xrdp/sbin/xrdp -n
Assertion failed: (size != 0), function read, file IPCConnection.hpp, line 55.
[1] 80910 abort sudo /opt/xrdp/sbin/xrdp -n

### xrdp.ini 원문 ###
[Globals]
ini_version=1
fork=false
port=3389
use_vsock=false
tcp_nodelay=true
tcp_keepalive=true
security_layer=negotiate
crypt_level=high
certificate=
key_file=
ssl_protocols=TLSv1.2, TLSv1.3
autorun=
allow_channels=true
allow_multimon=true
bitmap_cache=true
bitmap_compression=true
bulk_compression=true
max_bpp=32
new_cursors=true
use_fastpath=both
blue=009cb5
grey=dedede

ls_top_window_bg_color=009cb5
ls_width=350
ls_height=430
ls_bg_color=dedede

ls_logo_filename=
ls_logo_x_pos=55
ls_logo_y_pos=50

ls_label_x_pos=30
ls_label_width=65

ls_input_x_pos=110
ls_input_width=210
ls_input_y_pos=220

ls_btn_ok_x_pos=142
ls_btn_ok_y_pos=370
ls_btn_ok_width=85
ls_btn_ok_height=30
ls_btn_cancel_x_pos=237
ls_btn_cancel_y_pos=370
ls_btn_cancel_width=85
ls_btn_cancel_height=30

[Logging]
LogFile=xrdp.log
LogLevel=INFO
EnableSyslog=true

[LoggingPerLogger]

[Ulalaca]
name=Ulalaca
lib=libulalaca.dylib
username=ask
password=ask
#pamsessionmng=127.0.0.1

[Channels]
rdpdr=true
rdpsnd=true
drdynvc=true
cliprdr=true
rail=true
xrdpvr=true
tcutils=true

[Xorg]
name=Xorg
lib=libxup.dylib
username=ask
password=ask
port=-1
code=20

[Xvnc]
name=Xvnc
lib=libvnc.dylib
username=ask
password=ask
ip=127.0.0.1
port=-1

[vnc-any]
name=vnc-any
lib=libvnc.dylib
ip=ask
port=ask5900
username=na
password=ask

[neutrinordp-any]
name=neutrinordp-any
lib=libxrdpneutrinordp.dylib
ip=ask
port=ask3389
username=ask
password=ask



##### log 내용 ####
0230218-21:12:13] [INFO ] loaded module 'libulalaca.dylib' ok, interface size 1648, version 1
[20230218-21:12:13] [WARN ] POLLHUP bit set
[20230218-21:12:13] [WARN ] POLLHUP bit set
[20230218-21:12:13] [WARN ] POLLHUP bit set; closing connection
[20230218-21:12:15] [INFO ] dynamic_monitor_data:
[20230218-21:12:15] [INFO ] dynamic_monitor_data: msg_type 2 msg_length 56
[20230218-21:12:15] [WARN ] libxrdp_process_monitor_stream: physical_width is not within valid range. Setting physical_width to 0mm, Setting physical_height to 0mm, physical_width was: 0
[20230218-21:12:15] [WARN ] libxrdp_process_monitor_stream: physical_height is not within valid range. Setting physical_width to 0mm, Setting physical_height to 0mm, physical_height was: 0
[20230218-21:12:15] [INFO ] process_dynamic_monitor_description: Not allowing resize due to invalid dimensions (w: 0 x h: 0)
[20230218-21:12:15] [INFO ] dynamic_monitor_process_queue: Clearing failed request to resize to: (w: 0 x h: 0)
[20230218-21:12:15] [INFO ] process_dynamic_monitor_description: Not resizing. Already this size. (w: 1552 x h: 1026)
[20230218-21:12:15] [INFO ] dynamic_monitor_process_queue: Clearing completed resize (w: 1552 x h: 1026). It took 0 milliseconds.
arkx
IP 175.♡.211.196
08-21 2024-08-21 02:30:00
·
안녕하세요
이렇게 설정하면 속도는 어떤가용? ㅇㅇ
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB / 업로드 가능 확장자 jpg,gif,png,jpeg,webp
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
글쓰기
목록으로 댓글보기 이전글 다음글
아이디  ·  비밀번호 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET
보안 강화를 위한 이메일 인증
안전한 서비스 이용을 위해 이메일 인증을 완료해 주세요. 현재 회원님은 이메일 인증이 완료되지 않은 상태입니다.
최근 급증하는 해킹 및 도용 시도로부터 계정을 보호하기 위해 인증 절차가 강화되었습니다.

  • 이메일 미인증 시 글쓰기, 댓글 작성 등 게시판 활동이 제한됩니다.
  • 이후 새로운 기기에서 로그인할 때마다 반드시 이메일 인증을 거쳐야 합니다.
  • 2단계 인증 사용 회원도 최초 1회는 반드시 인증하여야 합니다.
  • 개인정보에서도 이메일 인증을 할 수 있습니다.
지금 이메일 인증하기
등록된 이메일 주소를 확인하고 인증번호를 입력하여
인증을 완료해 주세요.