linux/macOS : Wine 프로그램 실행용 Shell script(wrapper)

리눅스나 macOS 나 상황은 똑같다.
Wine 을 이용하여 MS 윈도우 프로그램을 실행시켜 주기 위해선 Wrapper 라 불리는, 실행 프로그램이 필요하다. Wrapper 를 뭐라 번역해야 좋을 지 잘 모르겠는데, 사실 잘 몰라서 그렇지, 많은 리눅스용 프로그램들이 이런 Wrapper 를 통해 실행되고 있다.

와인을 위한 표준 환경은 없지만, 대략 이런 정도면 무난하게 실행시킬 수 있는 포장지(?)를 만들 수 있다.

#!/bin/sh

# Finder 에서 Wine Mp3tag 을 실행하기 위한 스크립트.
# 다만, 이게 직접 실행되기 보다는, Automator 를 통해 macOS App. 을 생성하는데 쓰인다.

# Wine 실행경로를 PATH 에 추가
export PATH="/Applications/Wine Stable.app/Contents/Resources/wine/bin":$PATH


# 디렉토리명을 와인용으로 변환. winepath 는 유닉스 디렉토리 <---> 윈도우 디렉토리간 변환해주는 프로그램. (WineHQ FAQ 에서 알아냄.)
# 여기서 $1 매개변수를 쓰기 위해서는 리눅스 파일관리자에서 Parameter 를 %F 로 지정해줘야 한다. macOS 에선 Automator 를 사용한다.
# "$1" 로 겹따옴표로 묶어줘야 공백으로 인한 문자열 분할(Split) 현상이 생기지 않는다.

# dirname 은 전체경로에서 마지막 부분을 떼어버리고 바로 그 상위 디렉토리를 취한다.
# 예를 들어, dirname /usr/bin/gzip 이라 하면 /usr/bin 이 반환되지만,
# dirname /usr/bin 이라 하면 /usr 이 반환된다.
# 즉, dirname 이, 받은 인수가 파일인지 디렉토리인지 구분하는 능력은 없으므로,
# 이 스크립트에 넘길 인수는 '파일명 포함 전체경로'여야만 한다.
# 만약 디렉토리만 넘길 경우, dirname 이 문제가 될 수도 있다.
# 보다 명확한 처리를 원한다면, if [ -d "${PASSED}" ] 등을 사용하면 된다.

# 일단 이 스크립트에선 dirname 은 쓰지 않기로 한다. mp3tag 은 파일명이 넘어가도 어차피 바로 그 상위 디렉토리 전체를 입력으로 받기에 의미가 없다.

# 디렉토리 알아내고(dirname)
#tempF=$(dirname "$1")
tempF="$1"

#  Wine용으로 변환
folderw=$(winepath -w "$tempF" 2> /dev/null)

# 사용자 홈디렉토리를 알아낸 후, .wine 폴더 경로 추가.
# 만약, wine 이 설치된 경로가 다르면, 그 경로를 입력해준다.
USER_HOME=$HOME/'.wine'

# Wine 용 환경설정(32bit 전용)
export WINEPREFIX="$USER_HOME"
export WINEARCH="win32"
export LC_ALL="ko_KR.UTF-8"

# Wine 을 사용, MS 윈도우 프로그램 호출
wine "C:\Program Files\Mp3tag\Mp3tag.exe" "/fp:$folderw" &>/dev/null &

exit 0

실행은 이런 식으로 한다. 위 스크립트 파일이 wine_mp3tag 이라고 할 때,

wine_mp3tag <DIR>

이러면 해당 디렉토리로 mp3tag 이 열린다.
만약, 디렉토리를 주지 않고 그냥 실행시키면, 기본 위치(아마도 $HOME) 로 mp3tag 이 실행된다. 이게 맘에 들지 않으면, 인수가 있고 없음에 따라 if 문등을 사용하여 mp3tag 실행을 다르게 하게끔 설정해주면 된다.

그리고, 이 스크립트의 가장 큰 장점(Trick?)은 맨 마지막 부분에 있다.

wine "MS 윈도우 프로그램 실행파일 경로" "실행 옵션" &>/dev/null &

마지막에 &>/dev/null & 를 넣어줌으로써, 다음 글에 나오는 macOS 용 기어(Gear) 표시 문제를 해결할 수 있었다.
뜻은, ‘&> 로, 실행결과, 오류결과를 모두 날려 버리고, 마지막 & 로 키보드 입력을 분리하라’ 가 되겠다.

자세한 얘기는 다음 글에서..


macOS 에선, Wine 실행파일을 xxx.app 디렉토리에 아예 포함하여 ‘어플리케이션 화’하는 방법도 있다.


저 방법도 의미는 있겠으나, 나중에 관리를 생각하면 그다지 좋은 방법같지는 않다. Wine 도, 해당 프로그램도 따로 따로 판올림을 해줘야 하기 때문이다. 판올림 없이 최초 설치 상태로 계속 쓴다면야 또 모르지만..


이런 식으로 포장지를 만들어놓고, 리눅스에서 각 파일관리자(KDE Dolphin 이라든가, Xubuntu Thunar 라든가.. Nautilus 엔 이런 기능이 추가 됐는지 모르겠다. 예전엔 Nautilus Actions 라는 프로그램을 사용해야만 했다.)의 추가 기능을 통해 메뉴를 만들거나 아니면 .desktop 파일(이게 macOS 에선 Application 격이 된다.)로 만들어 파일 연관을 시킬 수도 있다.

macOS 에선 이 스크립트를 사용해서 일단은 App. 으로 만들어야 한다. xxx.app 이란 디렉토리를 만들고 하부에 적절한 파일들을 생성하면 되지만, 그냥 간단하게 Automator 로 만들어주는 편이 좋다.

**
오랜 꽃삽질이 드디어 결실을 맺는구나!

Author: 아무도안

1 thought on “linux/macOS : Wine 프로그램 실행용 Shell script(wrapper)

안녕하세요. 글 남겨주셔서 고맙습니다.