elsa in mac

Wayland 환경에서 사용가능한 Tablet지원 Whiteboard 앱 - drawy 본문

Linux

Wayland 환경에서 사용가능한 Tablet지원 Whiteboard 앱 - drawy

elsa in mac 2025. 11. 15. 14:51

 

이 포스트는 fedora linux를 기반으로 적성되었습니다. 

이번 포스트에서는 Linux Wayland 환경에서 Tablet을 활용할 수 있는 drawing Tool 인 drawy를 소개합니다. 

Linux에서 특히나 Wayland 환경에서는 Tablet을 이용하여 white board 스타일로 간단히 drawing을 할 수 있는 앱이 거의 없습니다. 그나마 가장 완성도 높은 근접한 솔루션으로 web browser기반의 Excalidraw 가 있지요. 필자도 개인적으로는 self-hosting으로 이 앱을 사용해 오고 있었습니다. 한데, 오늘 github를 검색하던 중, 웹 인터페이스가 아닌 QT6 기반의 C++ 앱이 있는 것을 알게 되었습니다.  2025년 1월 2일 날 프로젝트가 등록되어 있으니. 1여 년의 준비를 끝으로 공개한 것 같습니다. 

Github에는 x86_64용 appImage만 제공하기 때문에, aarch64 기반의 Linux를 사용하는 필자는 소스코드를 다운로드 받아 직접 빌드해서 사용해야 합니다.  

 

빌드 및 실행

빌드 과정에서 몇 가지 문제가 있었기 때문에 해당 문제와 해결 방안을 써 봅니다.  Github에서는 Compile을 하려면, QT6.9 이상이 설치되어 있어야 한다고 되어 있는데, CMakeLists.txt 파일을 보니, QT5를 참조합니다. 그러다 보니 compile 과정에서 오류가 발생하더군요.  그래서, QT6를 참조하도록 CMakeLists.txt 파일을 약간 수정해야 했습니다.  

우선, OpenGLWidgets 패키지를 찾는 부분을, 아래와 같이 Qt6 6.10에서 Widgets과 OpenGL을 찾는 것으로 변경했습니다. 

# 17라인 
# find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS OpenGLWidgets)
find_package(Qt6 6.10 REQUIRED COMPONENTS Core Gui Widgets OpenGL)

참고로 필자의 경우, 현재 QT6 6.10이 설치되어 있습니다. 

다음으로, link libraries 설정 부분을 아래와 같이 수정했습니다. 

# 56 라인 
# target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::OpenGLWidgets)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::OpenGL)

이렇게 수정을 한 후에, 아래의 명령을 통해 빌드를 진행했습니다. 

# setup cmake 
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release

# compile (build)
# -j 뒤에 빌드에 사용할 CPU core 수를 명시한다. ex) -j 8
cmake --build build --config Release -j

빌드가 정상적으로 이뤄지면 build 디렉토리에 "drawy" binary 파일이 생성됩니다.  해당 파일을 실행하면 아래와 같은 화면을 만나 볼 수 있습니다. 

Drawy 실행 화면

인터페이스는 개발자의 언급한 것과 같이 Excalidraw와 유사합니다. 

Zen 브라우저에서 실행한 Excalidraw 실행 화면

아래는 동영상 스샷. 

Tablet의 기본기능도 잘 지원하는 것 같습니다.  Tablet 사용 여부는 사용하는 Wayland DE나 Window Manager가 지원을 해 주어야 합니다. 

 

약간의 커스텀

잘 동작을 하는 것을 확인했으니, 모니터에서 직접 drawing을 하는 Annotation 앱으로 활용할 수 있을 것 같다는 생각에  배경을 투명하게 바꾸기 위해 소스코드를 분석했습니다.  다행히 QT 기반이기 때문에 간단하게 Window의 배경을 투명하게 만들 수 있었습니다. 

src/window/window.cpp 파일을 보면, 아래와 같이 MainWindow::에 대한 설정을 하는 코드가 있습니다. 

# 35 라인 
MainWindow::MainWindow(QWidget *parent) : QWidget(parent) {
  // 배경을 투명하게 ---------------
  this->setAttribute(Qt::WA_TranslucentBackground);
  this->setWindowFlags(Qt::FramelessWindowHint);
  //-----------------------------

  this->m_applyCustomStyles();

  BoardLayout *layout{new BoardLayout(this)};
  Controller *controller{new Controller(this)};
  ApplicationContext *context{ApplicationContext::instance()};

TranslucentBackGround Attiribute와 framelessWindowHint Flags를 정의해 주면 기본적으로 Window를 투명하게 설정할 수 있습니다. 

그리고, dark/light mode toggle 버튼에서 light mode는 개인적으로 사용하지 않기 때문에, light mode 시에 배경을 투명하게 설정하도록 했습니다.  이를 위해 src/common/constants.h 파일을 열고,  아래와 같이  Light Mode의 배경색상에 alpha 0를 추가해 줍니다. 

# 40 라인 
#constexpr QColor lightBackgroundColor{248, 249, 250}; 
constexpr QColor lightBackgroundColor{248, 249, 250, 0};

이제 다시 빌드를 하고 확인을 하면, 아래와 같이 배경이 투명한 white-board를 사용할 수 있습니다. 

Wayland WM에서 해당 toplevel에 대한 Pin 속성을 부여하고 필요할때, 다른 window 위에 중첩시키면 실시간으로 annotation을 할 수 있는 훌륭한 도구가 됩니다. 

 

하지만, 당장은 사용자가 그린 결과물을 json 파일로 저장하거나 로딩만 할 수 있을 뿐, 이미지 파일로 exporting하는 기능은 아직  없습니다. 그래서, 스샷 앱을 이용하여 스샷을 찍는 수 밖에는 없습니다.  그리고, Text 입력에서 한글이 입력되지 않습니다. 한글 입력 기능도 코드를 수정을 해서 구현은 했는데, 이 부분은 검토를 좀 더 하고,  추 후에 Pull Requests로 upstream 될 수 있도록 요청을 해 볼 예정 입니다.  

- - - - - - - - -

Linux에서 예전 Wacom tablet을 활용할 수 있는 앱이라는 측면에서 반갑고, C++ 기반으로 작성되어 안정적이면서도 처리속도가 매우 빠르고 부드럽게 반응합니다.  github에 보시면 phase 3 단계를 진행 중이며, 조만간 PNG로 export 할 수 있는 기능이 추가될 것 같습니다.  아직은 EXcalidraw가 UI/UX 측면에서 뛰어나지만, 설치및 실행이 번거로운 단점이 있지요. 그리 대중적인 앱은 아니겠지만 또 해당 기능이 필요한 유저들에겐 기다려 왔던 앱일 수 있는 만큼 관심이 있으시다면 방문하시어 검토해 보시기 바랍니다. 

공유하기 링크
Comments