Linux 以root用户登录后无法打开chrome谷歌浏览器
环境
$ uname -a
Linux ai 5.15.0-48-generic #54-Ubuntu SMP Fri Aug 26 13:26:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
复现
在Ubuntu系统中点击 chrome 图标打开chrome浏览器
$ /snap/bin/chromium
[46205:46205:0929/030240.832467:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
$ google-chrome
$ google-chrome-stable
正在现有的浏览器会话中打开。
[0929/030013.219204:ERROR:nacl_helper_linux.cc(315)] NaCl helper process running without a sandbox!
Most likely you need to configure your SUID sandbox correctly
BUG
提示不能以root用户打开
原因
chrome谷歌浏览器默认设置不能以root权限打开,主要是为了软件安全考虑,防止root权限进行破坏操作
解决
通过修改chrome的启动项配置可解决此问题
操作步骤
①使用以下命令打开“/usr/bin/google-chrome”文件
sudo gedit /usr/bin/google-chrome
②修改配置文件内容,如下所示
将
exec -a "$0" "$HERE/chrome" "$@"
修改为
exec -a "$0" "$HERE/chrome" "$@" --user-data-dir --no-sandbox
gedit /usr/bin/chromium-browser
#!/bin/sh
if ! [ -x /snap/bin/chromium ]; then
echo "" >&2
echo "Command '$0' requires the chromium snap to be installed." >&2
echo "Please install it with:" >&2
echo "" >&2
echo "snap install chromium" >&2
echo "" >&2
exit 1
fi
if [ "$(xdg-settings get default-web-browser)" = "chromium-browser.desktop" ]; then
xdg-settings set default-web-browser chromium_chromium.desktop
fi
# GNOME Shell
OLD="chromium-browser.desktop"
NEW="chromium_chromium.desktop"
FAVS=$(gsettings get org.gnome.shell favorite-apps 2> /dev/null)
if echo "$FAVS" | grep -q "'$OLD'"; then
NEWFAVS=$(echo $FAVS | sed -e "s#'$OLD'#'$NEW'#")
gsettings set org.gnome.shell favorite-apps "$NEWFAVS"
fi
# Unity
OLD="application://chromium-browser.desktop"
NEW="application://chromium_chromium.desktop"
FAVS=$(gsettings get com.canonical.Unity.Launcher favorites 2> /dev/null)
if echo "$FAVS" | grep -q "'$OLD'"; then
NEWFAVS=$(echo $FAVS | sed -e "s#'$OLD'#'$NEW'#")
gsettings set com.canonical.Unity.Launcher favorites "$NEWFAVS"
fi
# MATE
OLD="/usr/share/applications/chromium-browser.desktop"
NEW="/var/lib/snapd/desktop/applications/chromium_chromium.desktop"
OBJECTS=$(gsettings get org.mate.panel object-id-list 2> /dev/null)
for object in $OBJECTS; do
object=$(echo $object | cut -d\' -f2)
launcher=$(gsettings get org.mate.panel.object:/org/mate/panel/objects/$object/ launcher-location)
if [ "$launcher" = "'$OLD'" ]; then
gsettings set org.mate.panel.object:/org/mate/panel/objects/$object/ launcher-location "'$NEW'"
fi
done
# KDE Plasma
if which qdbus > /dev/null; then
SCRIPT="$(cat <<-EOF
for (var i = 0; i < panelIds.length; ++i) {
var panel = panelById(panelIds[i]);
var widgets = panel.widgets();
for (var j = 0; j < widgets.length; ++j) {
var widget = widgets[j];
if (widget.type == "org.kde.plasma.taskmanager") {
widget.currentConfigGroup = "General";
var launchers = widget.readConfig("launchers");
if (launchers.includes("chromium-browser.desktop")) {
widget.writeConfig("launchers", launchers.replace(/chromium-browser.desktop/g, "chromium_chromium.desktop"));
}
}
}
}
EOF
)"
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "$SCRIPT" 2> /dev/null
fi
# TODO: handle other desktop environments
exec /snap/bin/chromium "$@" --user-data-dir --no-sandbox