리눅스에서 HWPX/HWP 파일 열기: 압축 풀림부터 LibreOffice 연동까지
공공기관에서 받은 공고문이 .hwpx 파일이었다. 별생각 없이 파일 매니저에서 더블클릭했더니 문서가 열리는 게 아니라 압축이 풀려버렸다. 폴더 안에 mimetype, version.xml, Contents/section0.xml 같은 파일이 주르륵 쏟아졌다. 한글(Hancom)이 깔린 윈도우였으면 더블클릭 한 번으로 끝났을 일인데, 리눅스(Omarchy, Arch Linux)에서는 여기서부터 한 겹씩 막혔다.
먼저 결론부터. 제대로 열려면 두 가지를 손봐야 한다. ① 더블클릭이 압축을 풀지 않고 LibreOffice로 가게 하는 것, 그리고 ② LibreOffice가 HWPX를 실제로 렌더링하게 만드는 것. 둘은 별개의 문제였고, 두 번째가 진짜 벽이었다.
HWPX는 사실 ZIP 파일이다
왜 압축이 풀렸나. HWPX는 한컴이 ODF(OpenDocument) 방식을 따라 만든 ZIP 컨테이너 포맷이기 때문이다. 확장자만 .hwpx일 뿐, 속을 열어보면 본문 XML과 미리보기, 메타데이터가 들어 있는 평범한 ZIP이다. unzip -l로 보면 이렇다:
$ unzip -l 공고문.hwpx
Length Date Time Name
--------- ---------- ----- ----
19 1980-01-01 00:00 mimetype
310 1980-01-01 00:00 version.xml
108078 1980-01-01 00:00 Contents/header.xml
236427 1980-01-01 00:00 Contents/section0.xml
2211 1980-01-01 00:00 Preview/PrvText.txt
65892 1980-01-01 00:00 Preview/PrvImage.png
...
ODF처럼 맨 앞 mimetype 파일에 자기 정체가 적혀 있는데, 열어보면 application/hwp+zip이라고 나온다. 즉 포맷 자체는 “이건 한컴 문서다”라고 밝히고 있다. 문제는 리눅스 쪽에 이걸 받아줄 MIME 타입이 등록돼 있지 않다는 것. /usr/share/mime에는 구형 .hwp용 application/x-hwp만 있고 .hwpx는 없다. 그러니 파일 매니저는 내용물(ZIP 시그니처 PK…)만 보고 “이건 압축 파일이군” 하고 압축 해제기를 띄워버린다.
1차 시도: MIME 타입 등록과 기본 앱 연결
그렇다면 .hwpx(와 .hwp)를 ZIP이 아니라 “한컴 문서”라는 고유 타입으로 인식시키고, 그 타입을 LibreOffice에 연결하면 될 것 같았다. 먼저 사용자 영역에 MIME 타입을 하나 정의한다. ~/.local/share/mime/packages/hancom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/vnd.hancom.hwpx">
<comment>HWPX document</comment>
<glob pattern="*.hwpx"/>
</mime-type>
<mime-type type="application/x-hwp">
<comment>HWP document</comment>
<glob pattern="*.hwp"/>
</mime-type>
</mime-info>
그리고 MIME 데이터베이스를 갱신한다:
update-mime-database ~/.local/share/mime
이제 이 타입을 LibreOffice Writer에 연결한다. ~/.config/mimeapps.list의 [Default Applications]에 두 줄:
[Default Applications]
application/vnd.hancom.hwpx=libreoffice-writer.desktop
application/x-hwp=libreoffice-writer.desktop
이제 더블클릭하면 압축이 풀리는 대신 LibreOffice Writer가 뜬다. ① 문제는 해결. 그런데 막상 창이 뜨고 나니 문서 대신 에러가 났다. 더블클릭만 고쳐서는 끝이 아니었던 것이다.
LibreOffice는 .hwp는 읽어도 .hwpx는 못 읽는다
알고 보니 LibreOffice에는 libhwplo.so라는 HWP import 필터가 기본으로 들어 있다. 이름만 보면 한컴 문서를 다 읽어줄 것 같지만, 이 필터가 지원하는 건 구형 OLE2 기반의 바이너리 .hwp뿐이다. ZIP+XML 구조인 HWPX는 대상이 아니다. 그러니 GUI로 열면 에러가 뜨고, 커맨드라인 변환도 조용히 실패한다:
$ libreoffice --writer --headless --convert-to pdf 공고문.hwpx --outdir /tmp/
$ ls /tmp/*.pdf
# 종료 코드는 0인데 PDF가 안 생긴다 (필터가 포맷을 못 받아서 그냥 빠져나간 것)
여기가 진짜 벽이었다. 파일 연결을 아무리 손봐도 LibreOffice 순정 상태로는 HWPX를 못 읽으니, HWPX를 이해하는 import 필터를 따로 끼워 넣어야 했다.
진짜 해결: AUR H2Orestart 확장
AUR을 뒤져보니 이 간극을 메우는 패키지가 셋 있었다.
| 패키지 | 정체 |
|---|---|
| libreoffice-extension-h2orestart | HWP/HWPX를 LibreOffice에서 ODT로 임포트하는 확장 |
| hop-openhwp-bin | HWP/HWPX 전용 독립 에디터 |
| hoffice-hwp | 한컴 오피스 중 HWP 에디터만 떼어낸 리눅스 빌드 |
이미 LibreOffice를 쓰고 있으니, 거기에 끼워 넣기만 하면 되는 libreoffice-extension-h2orestart가 가장 깔끔했다. 이름 그대로, HWP/HWPX를 LibreOffice 안에서 ODT로 변환해 열어주는 확장이다.
yay -S libreoffice-extension-h2orestart
확장이 Java로 만들어져서 설치할 때 JDK(OpenJDK)가 의존성으로 같이 깔린다. 그 외에 별도 설정은 없다. 설치하고 LibreOffice를 다시 켜면 확장이 자동으로 로드된다. 이제 아까 조용히 실패하던 변환이 멀쩡히 돌아간다:
$ libreoffice --writer --headless --convert-to pdf 공고문.hwpx --outdir /tmp/
convert .../공고문.hwpx -> /tmp/공고문.pdf using filter : writer_pdf_Export
검증: 더블클릭하면 편집 가능한 문서로 열린다
실제 파일로 확인했다. 파일 매니저에서 .hwpx를 더블클릭하면 이제 압축이 풀리는 일 없이 LibreOffice Writer로 곧장 열린다. PDF 뷰어로 뜨는 게 아니라, H2Orestart가 HWPX를 ODT로 임포트해서 표·본문이 그대로 살아 있는 편집 가능한 문서로 뜬다. 파일 연결을 바로잡은 것과 H2Orestart로 렌더링을 뚫은 것, 이 둘이 맞물려야 비로소 “더블클릭하면 문서가 뜬다”가 된다.
참고로 앞에서 쓴 --convert-to pdf는 GUI 없이도 필터가 도는지 확인하려고 돌린 검증용이지, 평소에 문서를 열 때 쓰는 방식은 아니다. 다만 같은 import 필터를 태우는 거라 여러 파일을 한꺼번에 PDF로 떨굴 때 쓸모가 있다. 88KB 공고문이 깨짐 없는 347KB PDF로 떨어지는 걸로 렌더링이 정상인 것도 같이 확인했다.
또 다른 길: rhwp
사실 이 삽질을 X에 먼저 올렸는데, Brian Hong 님이 댓글로 rhwp를 알려줬다. 그런 게 있다는 건 어렴풋이 알고 있었지만 이름도 몰랐고 이번엔 떠올리지도 못했는데, 덕분에 처음 써봤다.
rhwp는 Rust와 WebAssembly로 만든 HWP/HWPX 뷰어 겸 에디터다. 저장소를 클론해 cargo build --release 하면 rhwp 바이너리가 나오고, 한 줄로 여러 포맷으로 뽑을 수 있다.
rhwp info 문서.hwpx # 페이지/표/폰트 등 구조 정보
rhwp export-text 문서.hwpx -o out/ # 페이지별 텍스트
rhwp export-markdown 문서.hwpx -o out/ # 표를 마크다운 표로
rhwp export-svg 문서.hwpx -o out/ # 벡터 렌더(SVG)
rhwp export-pdf 문서.hwpx -o out.pdf
그 공고문으로 돌려보니 4페이지, 표 2개까지 구조를 정확히 읽었고, SVG/PDF 렌더도 표 테두리까지 깨짐 없이 나왔다. 표가 마크다운 표(| 성명 | 주소 | … |)로 떨어지는 것도 깔끔했다. 편집까지 하려면 브라우저용 웹 에디터 rhwp-studio도 있는데, 이건 WASM 빌드가 따로 필요하다.
다만 rhwp는 export 중심의 CLI 도구라, 파일 매니저에서 더블클릭해 바로 보는 용도와는 결이 다르다. 오히려 텍스트나 마크다운으로 뽑아내기 좋아서, 내가 직접 열어볼 때보다 AI에게 “이 hwpx 좀 읽어봐”라고 시킬 때 더 유용할 것 같다. AI가 바이너리 hwpx를 직접 읽긴 어렵지만, rhwp로 텍스트나 마크다운으로 바꿔 물려주면 되니까.
마치며
“리눅스에서 HWPX가 안 열린다”는 한 문장 같지만, 뜯어보면 층이 둘이었다. 겉의 압축이 풀리는 현상은 MIME 타입이 없어서 생긴 파일 매니저의 오해였고, MIME 등록과 기본 앱 연결로 풀린다. 그 아래 LibreOffice가 HWPX를 못 읽는 진짜 벽은 순정 필터(libhwplo.so)가 구형 .hwp만 지원하는 데서 왔고, 이건 커뮤니티 확장 H2Orestart가 메워줬다. 공공기관 문서가 HWPX로 오는 일이 생각보다 잦은데, 한 번 설정해두니 이제 리눅스에서도 더블클릭으로 연다.
결국엔 둘을 용도로 나눠 쓸 것 같다. Omarchy에 통합해 더블클릭으로 바로 여는 일상용은 LibreOffice + H2Orestart, 내용을 텍스트나 마크다운으로 뽑거나 AI에 물릴 땐 rhwp.
Sun, 28 Jun 2026 00:12:04 +0900