diff --git a/meta-digi-dey/recipes-crank/crank-demos/crank-demos/crank-demo-init b/meta-digi-dey/recipes-crank/crank-demos/crank-demos/crank-demo-init index df37d886b..c0000eac5 100644 --- a/meta-digi-dey/recipes-crank/crank-demos/crank-demos/crank-demo-init +++ b/meta-digi-dey/recipes-crank/crank-demos/crank-demos/crank-demo-init @@ -14,8 +14,10 @@ #=============================================================================== readonly DEMO="##CRANK_DEMO_PATH##" +readonly DEMO_DISPLAY="##CRANK_DEMO_DISPLAY##" readonly DEMO_OPTS="##CRANK_DEMO_OPTIONS##" readonly DEMO_ENV="##CRANK_DEMO_ENV##" +readonly DEMO_USER="##CRANK_DEMO_USER##" readonly SB_LAUNCHER="sb-launcher" readonly SB_LAUNCHER_SCRIPT="/usr/bin/${SB_LAUNCHER}" readonly CRANK_DEMO="crank-demo" @@ -31,14 +33,9 @@ log() { } get_crank_demo_pid() { - local pids="$(pidof -o $$ "${SB_LAUNCHER}" 2>/dev/null)" + local pid="$(pgrep -f ${DEMO})" - [ -n "${pids}" ] || return 1 - for pid in ${pids}; do - local cmd_line=$(xargs -0 < /proc/${pid}/cmdline) - local app="${cmd_line##* }" - [ "${app}" = "${DEMO}" ] && { echo "${pid}"; return 0; } - done + [ -n "${pid}" ] && { echo "${pid}"; return 0; } return 1 } @@ -46,7 +43,7 @@ get_crank_demo_pid() { check_is_running() { local pid - if [ -f "${PID_FILE}" ]; then + if [ -s "${PID_FILE}" ]; then pid="$(cat ${PID_FILE})" else pid="$(get_crank_demo_pid)" @@ -57,18 +54,35 @@ check_is_running() { kill -0 "${pid}" >/dev/null 2>&1 && return 0 fi + rm -f "${PID_FILE}" + return 1 } +wait_for_wayland() { + local count=20 + local wayland_socket="/run/user/$(id -u ${DEMO_USER})/${DEMO_DISPLAY}" + + [ -S "${wayland_socket}" -o ! -d "/usr/share/wayland/" ] && return 0 + while [ ! -S "${wayland_socket}" ]; do + sleep 1 + count=$((count-1)) + if [ "${count}" = 0 ]; then + return 1 + fi + done + return 0 +} + stop() { - check_is_running || { rm -f "${PID_FILE}"; return; } + check_is_running || return local pid="$(cat ${PID_FILE})" kill -TERM "${pid}" >/dev/null 2>&1 local STOP_TIMEOUT="5" for i in $(seq ${STOP_TIMEOUT}); do - check_is_running || { rm -f "${PID_FILE}"; log info "stopped"; break; } + check_is_running || { log info "stopped"; break; } if [ "${i}" -eq ${STOP_TIMEOUT} ]; then log warning "stop: ${CRANK_DEMO} did not stop gracefully" kill -KILL "${pid}" >/dev/null 2>&1 @@ -80,9 +94,11 @@ stop() { start() { check_is_running && { log warning "start: ${CRANK_DEMO} ALREADY running"; exit 0; } - env ${DEMO_ENV} ${SB_LAUNCHER_SCRIPT} ${DEMO_OPTS} ${DEMO} >/dev/null 2>&1 & + wait_for_wayland + env ${DEMO_ENV} ${SB_LAUNCHER_SCRIPT} ${DEMO_USER} ${DEMO_OPTS} ${DEMO} >/dev/null 2>&1 & if [ $? -eq 0 ]; then echo $! > ${PID_FILE} + log info "$(cat ${PID_FILE})" log info "started" fi } diff --git a/meta-digi-dey/recipes-crank/crank-demos/crank-demos/crank-demo.service b/meta-digi-dey/recipes-crank/crank-demos/crank-demos/crank-demo.service index a7a9e4585..7d4144c69 100644 --- a/meta-digi-dey/recipes-crank/crank-demos/crank-demos/crank-demo.service +++ b/meta-digi-dey/recipes-crank/crank-demos/crank-demos/crank-demo.service @@ -3,7 +3,7 @@ Description=Crank Software demo Documentation=https://www.cranksoftware.com/ # Make sure we are started after graphic service is available -After=weston@root.service +After=##WESTON_SERVICE## [Service] Type=forking diff --git a/meta-digi-dey/recipes-crank/crank-demos/crank-demos_7.1.bb b/meta-digi-dey/recipes-crank/crank-demos/crank-demos_7.1.bb index 1174b6b78..bed219efc 100644 --- a/meta-digi-dey/recipes-crank/crank-demos/crank-demos_7.1.bb +++ b/meta-digi-dey/recipes-crank/crank-demos/crank-demos_7.1.bb @@ -15,12 +15,20 @@ SRC_URI = " \ SRC_URI[md5sum] = "e7cfbe9590041c0d9bf8c64ab69ee57d" SRC_URI[sha256sum] = "2aa767f51183a5e96bacf5e4b03345524d29c30f7338b1a55e5a1080252bfd4a" +WESTON_SERVICE ?= "weston@root.service" +WESTON_SERVICE:ccmp15 ?= "weston-launch.service" + CRANK_DEMOS_TARBALL_PATH ?= "" -CRANK_DEMO_PATH ?= "${datadir}/crank/apps/Thermostat/Thermostat.gapp" +CRANK_DEMO_DISPLAY ?= "wayland-0" +CRANK_DEMO_DISPLAY:ccmp15 ?= "wayland-1" +CRANK_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=\${DEMO_DISPLAY}" +CRANK_DEMO_ENV:ccimx6ul ?= "" +CRANK_DEMO_ENV:ccmp15 ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/1000 WAYLAND_DISPLAY=\${DEMO_DISPLAY}" CRANK_DEMO_OPTIONS ?= "" CRANK_DEMO_OPTIONS:ccimx6ul ?= "-odev-input,mouse=/dev/input/mouse0 -oscreen_mgr,swcursor" -CRANK_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=wayland-0" -CRANK_DEMO_ENV:ccimx6ul ?= "" +CRANK_DEMO_PATH ?= "${datadir}/crank/apps/Thermostat/Thermostat.gapp" +CRANK_DEMO_USER ?= "root" +CRANK_DEMO_USER:ccmp15 ?= "weston" # The tarball is only available for downloading after registration, so provide # a PREMIRROR to a local directory that can be configured in the project's @@ -64,6 +72,8 @@ do_install () { # Install systemd unit files install -d ${D}${systemd_unitdir}/system install -m 0644 ${WORKDIR}/crank-demo.service ${D}${systemd_unitdir}/system/ + sed -i -e "s@##WESTON_SERVICE##@${WESTON_SERVICE}@g" \ + "${D}${systemd_unitdir}/system/crank-demo.service" fi # Install wrapper bootscript to launch Crank demo on boot @@ -72,6 +82,8 @@ do_install () { sed -i -e "s@##CRANK_DEMO_PATH##@${CRANK_DEMO_PATH}@g" \ -e "s@##CRANK_DEMO_OPTIONS##@${CRANK_DEMO_OPTIONS}@g" \ -e "s@##CRANK_DEMO_ENV##@${CRANK_DEMO_ENV}@g" \ + -e "s@##CRANK_DEMO_USER##@${CRANK_DEMO_USER}@g" \ + -e "s@##CRANK_DEMO_DISPLAY##@${CRANK_DEMO_DISPLAY}@g" \ "${D}${sysconfdir}/crank-demo" ln -sf ${sysconfdir}/crank-demo ${D}${sysconfdir}/init.d/crank-demo } diff --git a/meta-digi-dey/recipes-crank/crank-sbengine/crank-sbengine/sb-launcher b/meta-digi-dey/recipes-crank/crank-sbengine/crank-sbengine/sb-launcher index e4ed475e9..c1bcd3455 100644 --- a/meta-digi-dey/recipes-crank/crank-sbengine/crank-sbengine/sb-launcher +++ b/meta-digi-dey/recipes-crank/crank-sbengine/crank-sbengine/sb-launcher @@ -2,4 +2,7 @@ ENGINE="/usr/share/crank/sbengine" -exec env LD_LIBRARY_PATH="${ENGINE}/lib" SB_PLUGINS="${ENGINE}/plugins" ${ENGINE}/bin/sbengine "$@" +USER=$1 +shift + +exec su -l "${USER}" -c "env LD_LIBRARY_PATH=${ENGINE}/lib SB_PLUGINS=${ENGINE}/plugins ${ENGINE}/bin/sbengine $*" diff --git a/meta-digi-dey/recipes-crank/crank-sbengine/crank-sbengine_7.1.bb b/meta-digi-dey/recipes-crank/crank-sbengine/crank-sbengine_7.1.bb index 7a39ab385..b6395e064 100644 --- a/meta-digi-dey/recipes-crank/crank-sbengine/crank-sbengine_7.1.bb +++ b/meta-digi-dey/recipes-crank/crank-sbengine/crank-sbengine_7.1.bb @@ -42,6 +42,7 @@ do_install () { # Copy the engine install -d -m 0755 ${D}${datadir}/crank/sbengine cp -drf ${S}/${SBENGINE_NAME}/* ${D}${datadir}/crank/sbengine + chmod a+rx ${D}${datadir}/crank/sbengine/* } FILES:${PN} = " \