summarylogtreecommitdiffstats
path: root/chromiumos-ui.sh
blob: 5467bb6cd0674f629aa7aca8a6f4516c2e3ebfa8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/bash

USER_DATA_DIR=$HOME/.config/chromiumos-ui
FLASH_DIR=/usr/lib/PepperFlash
FLASH_LIB=$FLASH_DIR/libpepflashplayer.so
FLASH_MANIFEST=$FLASH_DIR/manifest.json
GOOGLE_KEYFILE=$HOME/.googleapikeys
GOOGLE_KEYNAMES=(google_{api_key,default_client_{id,secret}})

json2vars() {
    local IFS=,
    jq -r "{$*}"' | to_entries | map("\(.key)=\(.value | @sh)") | .[]'
}

keys2json() {
    echo '{'
    sed -e "s/\"/\\\\\"/g;s/'/\"/g" | \
        tr "\n" " " | \
        sed -e "s/,[[:space:]]*$//"
    echo '}'
}

# Allow users to override command-line options
# Based on Gentoo's chromium package (and by extension, Debian's)
if [[ -f /etc/chromiumos-ui/default ]]; then
    . /etc/chromiumos-ui/default
fi

# Prefer user defined CHROMIUM_USER_FLAGS (from env) over system
# default CHROMIUM_FLAGS (from /etc/chromiumos-ui/default)
CHROMIUM_FLAGS=${CHROMIUM_USER_FLAGS:-$CHROMIUM_FLAGS}

# Use separate profile for Google logins
if [[ "$1" == "--login" ]]; then
    shift
    use_login_manager=yes
    use_login_profile=yes
fi

# Auto-login last user if requested
if [[ "$1" == "--lastuser" ]]; then
    shift
    # Check if user has ever logged into Google account before
    if [[ -d "$USER_DATA_DIR/user" ]]; then
        # Get last logged-in user
        user=$(sed -nr \
                   -e 's/^\s*"LastLoggedInRegularUser": "([^"]*)",/\1/p' \
                   "$USER_DATA_DIR/Local State")
        # Check for stub user
        if [[ "$user" == "stub-user@example.com" ]]; then
            # Fallback to using the login manager
            user=
        else
            # Auto login user
            use_login_manager=
        fi
    fi
fi

# Auto-detect Flash player support
if [ -f $FLASH_LIB ]; then
    eval $(json2vars version < $FLASH_MANIFEST)
    CHROMIUM_FLAGS="$CHROMIUM_FLAGS --ppapi-flash-path=$FLASH_LIB --ppapi-flash-version=$version"
fi

# Use Google API keys if available
if [ -f $GOOGLE_KEYFILE ]; then
    eval $(keys2json < $GOOGLE_KEYFILE | json2vars ${GOOGLE_KEYNAMES[@]})
    for var in ${GOOGLE_KEYNAMES[@]}; do
        eval export ${var^^}="\$$var"
    done
fi

exec /usr/lib/chromiumos-ui/chrome \
     $CHROMIUM_FLAGS \
     --user-data-dir=$USER_DATA_DIR \
     ${use_login_profile:+--login-profile=user} \
     ${use_login_manager:+--login-manager} \
     ${user:+--login-user=}$user \
     "$@"