MAGAZINE
ルーターマガジン
google-chromeコマンドをMacで使う方法
環境
ローカル環境- macOS Big Sur iOS11.6
- プロセッサ : 2.3 GHz デュアルコアIntel Core i5
- Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-38-generic x86_64)
Chromeの起動方法
Macにはgoogle-chromeコマンドがないため、シェルスクリプト上でchromeを起動させるには、chromeのフルパスを使用して起動していました。
ローカルサーバーがMacで、リモートサーバーはLinuxの場合では、以下のような分岐を使用して、chromeの起動方法を切り替えていました。しかし、Macでgoogle-chromeコマンドが使えればこの分岐が必要なくなり、無駄な処理を省くことができます!
if [ `uname` = "Darwin" ]; then
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-gpu --remote-debugging-port=9222 --user-data-dir=./user --no-sandbox --display=:0.0 &
elif [ `uname` = "Linux" ]; then
google-chrome --disable-gpu --remote-debugging-port=9222 --user-data-dir=./user --no-sandbox --display=:0.0 &
fi
また、chrome_remoteでChromeを自動操縦するには、予めChromeをremote_debbuging_portパラメータつきで起動しておく必要があります。
解決法
結論としてはラッピングされたシェルスクリプトのパスをMACでのchromeのパスに変更して作成することで、macでもremote_debbuging_portパラメータつきで起動できるgoogle-chromeコマンドが使用できるようになります。
$ touch /usr/local/bin/google-chrome
$ chmod a+x /usr/local/bin/google-chrome
$ echo -e '#!/bin/bash\nexec -a "$0" /Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome "$@"' >> /usr/local/bin/google-chrome
解決過程
エイリアスを作る方法(失敗)
始めにエイリアスを作ればMAC上でもgoogle-chromeコマンドを使用できるのではないかということで、以下のようにエイリアスを設定、反映しました。
echo -e alias “google-chrome=‘/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome’” >> ~/.bashrc
source ~/.bashrc
しかし、bash上でgoogle-chromeコマンドを実行してみようとすると、エイリアスが適用されておらず、実行できません。これは、man bash
を見るとわかります。
Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt
Bashが非インタラクティブモード(非対話型モード)ではaliasは展開されないと書かれているため、非インタラクティブモードであるシェルスクリプトでは実行できなかったことがわかります。
Linuxではどうしてるか?
Linuxのgoogle-chromeコマンドの中身をみてみると、結局はシェルスクリプトでラップしているだけでした。
$ which google-chrome
/usr/bin/google-chrome
$ cat /usr/bin/google-chrome
#!/bin/bash
#
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Let the wrapped binary know that it has been run through the wrapper.
export CHROME_WRAPPER="`readlink -f "$0"`"
HERE="`dirname "$CHROME_WRAPPER"`"
# We include some xdg utilities next to the binary, and we want to prefer them
# over the system versions when we know the system versions are very old. We
# detect whether the system xdg utilities are sufficiently new to be likely to
# work for us by looking for xdg-settings. If we find it, we leave $PATH alone,
# so that the system xdg utilities (including any distro patches) will be used.
if ! which xdg-settings &> /dev/null; then
# Old xdg utilities. Prepend $HERE to $PATH to use ours instead.
export PATH="$HERE:$PATH"
else
# Use system xdg utilities. But first create mimeapps.list if it doesn't
# exist; some systems have bugs in xdg-mime that make it fail without it.
xdg_app_dir="${XDG_DATA_HOME:-$HOME/.local/share/applications}"
mkdir -p "$xdg_app_dir"
[ -f "$xdg_app_dir/mimeapps.list" ] || touch "$xdg_app_dir/mimeapps.list"
fi
# Always use our versions of ffmpeg libs.
# This also makes RPMs find the compatibly-named library symlinks.
if [[ -n "$LD_LIBRARY_PATH" ]]; then
LD_LIBRARY_PATH="$HERE:$HERE/lib:$LD_LIBRARY_PATH"
else
LD_LIBRARY_PATH="$HERE:$HERE/lib"
fi
export LD_LIBRARY_PATH
export CHROME_VERSION_EXTRA="stable"
# We don't want bug-buddy intercepting our crashes. http://crbug.com/24120
export GNOME_DISABLE_CRASH_DIALOG=SET_BY_GOOGLE_CHROME
# Sanitize std{in,out,err} because they'll be shared with untrusted child
# processes (http://crbug.com/376567).
exec >(exec cat)
exec 2> >(exec cat >&2)
# Note: exec -a below is a bashism.
exec -a "$0" "$HERE/chrome" "$@"
決めてとなるのは最終行のこちらです。
exec -a "$0" "$HERE/chrome" "$@"
$HERE/chromeをシェルスクリプトでラッピングしていることがわかります。
では、どうすればMac向けにできるか?
要は最終行の第二引数にchromeのパスがあれば良いので、Chromeのパスの部分をMACでのChromeのフルパスに変更し、そのシェルスクリプトを/usr/local/bin/google-chromeに作成することでMacでもgoogle-chromeコマンドが使用できます!!
#!/bin/bash
exec -a "$0" /Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome "$@"
chromeのパスが異なる人の場合は、適宜パスの部分を変更してみてください。
参考サイト
CONTACT
お問い合わせ・ご依頼はこちらから