Mac
karabiner-Elements
RockSmith2014
HighSierra

RocksmithとKarabiner-Elements

Mac用キー割り当てカスタマイズアプリ「Karabiner-Elements」が動いている macOS High Sierra で、UBIのゲーム「Rocksmith 2014」を動かすと、何かが干渉するのか、曲の検索やテクニックゲーム(GUITARCADE)でキーボード入力ができないので困ります。特にGUITARCADEはゲームを終了してメニューに戻ることができなくなるので辛いです。

Rocksmithを起動する前にKarabiner-Elementsを終了させておけば問題ないのですが、ついそれを忘れて起動して、「むむむ」ってなるのでカッとなって自動化してみました。

Hack the Rocksmith 2014 startup script

Rocksmith 2014をSteam経由でインストールしていると、どこかに(ユーザのアプリケーションフォルダですかね?)にロックスミスのアイコンになってるアプリケーションバンドル "Rocksmith 2014 Edition - Remastered.app" があると思います。

rocksmith.png

ターミナル経由でそのバンドルの中のシェルスクリプトをテキストエディタで開きます。

$ cd ~/Applications/
$ vi "Rocksmith 2014 Edition - Remastered.app/Contents/MacOS/run.sh"

すると

#!/bin/bash
# autogenerated file - do not edit

open steam://run/221680

みたいな感じになっているので、これを("do not edit"を無視して)

#!/bin/bash
# autogenerated file - do not edit

/bin/launchctl bootout gui/`id -u`/org.pqrs.karabiner.karabiner_console_user_server
/usr/bin/killall Karabiner-Menu

open steam://run/221680

sleep 10
RUN_CHECK="`dirname "$0"`/run-check.sh"
nohup "$RUN_CHECK" > /dev/null 2>&1 &

に修正して保存します。さらに、ゲーム終了のプロセス監視を行うスクリプト(run-check.sh)をrun.shと同じディレクトリに作ります。

$ vi "Rocksmith 2014 Edition - Remastered.app/Contents/MacOS/run-check.sh"
$ chmod 755 "Rocksmith 2014 Edition - Remastered.app/Contents/MacOS/run-check.sh"

run-check.shの内容は、

#!/bin/bash

while true
do
    alive=`pgrep Rocksmith2014 | wc -l`
    if [ $alive = 0 ]; then
        break
    fi
    sleep 5
done

open /Applications/Karabiner-Elements.app

です。

これで、Rocksmithで遊ぶときにこれをダブルクリックして起動するようにすれば(私はDockに入れていつでも遊べるようにしています)、Karabiner-Elementsが終了してからゲームが開始します。そしてゲームを遊び終わってデスクトップに戻ってきたら、Karabiner-Elementsが自動で起動します。

関連情報
- Karabiner-Elements blocking certain inputs in Rocksmith
- How can quit KE through hammerspoon or applescript or shell, please?

以上です。

追記: 2018-04-15

最近、macOSかSteamかどちらかが最新に更新されて以降、open steam://... が正しく動作しなくなったようです。このため、シェルスクリプトからRocksmithを起動できなくなってしまいました。残念。