The branch, master has been updated via 937fd25f831c5a0e1a617eab132d8f416d5b36ee (commit) from 7399e80bd8181c79b16d80a6c2213619dfe2ff87 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 937fd25f831c5a0e1a617eab132d8f416d5b36ee Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Wed Nov 20 12:48:13 2013 +0100 Work around Debian bug #729373 during TCE creation. Replace alsa-utils init script and ALSA's utils.sh (for Debian wheezy+jessie chroots). ----------------------------------------------------------------------- Summary of changes: debian/changelog | 4 +- debian/x2gothinclient-chroot.install | 1 + .../patchsets/alsa-utils.wheezy/alsa-utils | 209 ++++++++++++++++++++ .../patchsets/alsa-utils.wheezy/utils.sh | 182 +++++++++++++++++ .../sbin/x2gothinclient_create | 7 + 5 files changed, 401 insertions(+), 2 deletions(-) create mode 100644 debian/x2gothinclient-chroot.install create mode 100755 x2gothinclient-chroot/patchsets/alsa-utils.wheezy/alsa-utils create mode 100644 x2gothinclient-chroot/patchsets/alsa-utils.wheezy/utils.sh The diff of changes is: diff --git a/debian/changelog b/debian/changelog index 7d613da..5498d6c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -15,8 +15,8 @@ x2gothinclient (1.1.0.1-0~x2go1) UNRELEASED; urgency=low during thin client startup. - Patch /etc/init.d/checkroot-bootclean.sh during TCE creation to avoid failures when clean tmp files on the read-only NFS root-fs. - - Work around Debian bug #729373 during TCE creation. Patch alsa-utils - init script and ALSA's utils.sh. + - Work around Debian bug #729373 during TCE creation. Replace alsa-utils + init script and ALSA's utils.sh (for Debian wheezy+jessie chroots). - Refrain from using "~<user>" when launching X2Go Client as it cannot handle it, yet. Use "~" instead (handable by X2Go Client >= 4.0.1.2). - Tweak the /etc/os-release more comprehensively. diff --git a/debian/x2gothinclient-chroot.install b/debian/x2gothinclient-chroot.install new file mode 100644 index 0000000..53435cc --- /dev/null +++ b/debian/x2gothinclient-chroot.install @@ -0,0 +1 @@ +x2gothinclient-chroot/patchsets usr/share/x2go/tce/ \ No newline at end of file diff --git a/x2gothinclient-chroot/patchsets/alsa-utils.wheezy/alsa-utils b/x2gothinclient-chroot/patchsets/alsa-utils.wheezy/alsa-utils new file mode 100755 index 0000000..0dc8372 --- /dev/null +++ b/x2gothinclient-chroot/patchsets/alsa-utils.wheezy/alsa-utils @@ -0,0 +1,209 @@ +#!/bin/sh +# +# alsa-utils initscript +# +### BEGIN INIT INFO +# Provides: alsa-utils +# Required-Start: $local_fs $remote_fs +# Required-Stop: $remote_fs +# Default-Start: S +# Default-Stop: 0 1 6 +# Short-Description: Restore and store ALSA driver settings +# Description: This script stores and restores mixer levels on +# shutdown and bootup.On sysv-rc systems: to +# disable storing of mixer levels on shutdown, +# remove /etc/rc[06].d/K50alsa-utils. To disable +# restoring of mixer levels on bootup, rename the +# "S50alsa-utils" symbolic link in /etc/rcS.d/ to +# "K50alsa-utils". +### END INIT INFO + +# Don't use set -e; check exit status instead + +# Exit silently if package is no longer installed +[ -x /usr/sbin/alsactl ] || exit 0 + +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +MYNAME=/etc/init.d/alsa-utils +export ALSACTLHOME=/var/run/alsa + +[ -d "$ALSACTLHOME" ] || mkdir -p "$ALSACTLHOME" + +. /lib/lsb/init-functions +. /usr/share/alsa/utils.sh + +# $1 EXITSTATUS +# [$2 MESSAGE] +log_action_end_msg_and_exit() +{ + log_action_end_msg "$1" ${2:+"$2"} + exit $1 +} + +# $1 PROGRAM +executable() +{ + # If which is not available then we must be running before + # /usr is mounted on a system that has which in /usr/bin/. + # Conclude that $1 is not executable. + [ -x /bin/which ] || [ -x /usr/bin/which ] || return 1 + which "$1" >/dev/null 2>&1 +} + +executable amixer || { echo "${MYNAME}: Error: No amixer program available." >&2 ; exit 1 ; } + +# $1 <card ID> | "all" +restore_levels() +{ + [ -f /var/lib/alsa/asound.state ] || return 1 + CARD="$1" + [ "$1" = all ] && CARD="" + # Assume that if alsactl prints a message on stderr + # then it failed somehow. This works around the fact + # that alsactl doesn't return nonzero status when it + # can't restore settings for the card + if MSG="$(alsactl -E HOME="$ALSACTLHOME" restore $CARD 2>&1 >/dev/null)" && [ ! "$MSG" ] ; then + return 0 + else + # Retry with the "force" option. This restores more levels + # but it results in much longer error messages. + alsactl -F restore $CARD >/dev/null 2>&1 + log_action_cont_msg "warning: 'alsactl -E HOME="$ALSACTLHOME" restore${CARD:+ $CARD}' failed with error message '$MSG'" + return 1 + fi +} + +# $1 <card ID> | "all" +store_levels() +{ + CARD="$1" + [ "$1" = all ] && CARD="" + if MSG="$(alsactl -E HOME="$ALSACTLHOME" store $CARD 2>&1)" ; then + sleep 1 + return 0 + else + log_action_cont_msg "warning: 'alsactl store${CARD:+ $CARD}' failed with error message '$MSG'" + return 1 + fi +} + + +# $1 <card ID> +mute_and_zero_levels_on_card() +{ + CARDOPT="-c $1" + for CTL in \ + Master \ + PCM \ + Synth \ + CD \ + Line \ + Mic \ + "PCM,1" \ + Wave \ + Music \ + AC97 \ + "Master Digital" \ + DAC \ + "DAC,0" \ + "DAC,1" \ + Headphone \ + Speaker \ + Playback + do + mute_and_zero_level "$CTL" + done +# for CTL in \ +# "Audigy Analog/Digital Output Jack" \ +# "SB Live Analog/Digital Output Jack" +# do +# switch_control "$CTL" off +# done + return 0 +} + +# $1 <card ID> | "all" +mute_and_zero_levels() +{ + TTZML_RETURNSTATUS=0 + case "$1" in + all) + for CARD in $(echo_card_indices) ; do + mute_and_zero_levels_on_card "$CARD" || TTZML_RETURNSTATUS=1 + done + ;; + *) + mute_and_zero_levels_on_card "$1" || TTZML_RETURNSTATUS=1 + ;; + esac + return $TTZML_RETURNSTATUS +} + + +# $1 <card ID> | "all" +card_OK() +{ + [ "$1" ] || bugout + if [ "$1" = all ] ; then + [ -d /proc/asound ] + return $? + else + [ -d "/proc/asound/card$1" ] || [ -d "/proc/asound/$1" ] + return $? + fi +} + +# If a card identifier is provided in $2 then regard it as an error +# if that card is not present; otherwise don't regard it as an error. + +case "$1" in + start) + EXITSTATUS=0 + TARGET_CARD="$2" + case "$TARGET_CARD" in + ""|all) TARGET_CARD=all ; log_action_begin_msg "Setting up ALSA" ;; + *) log_action_begin_msg "Setting up ALSA card ${TARGET_CARD}" ;; + esac + card_OK "$TARGET_CARD" || log_action_end_msg_and_exit "$( [ ! "$2" ] ; echo $? ; )" "none loaded" + preinit_levels "$TARGET_CARD" || EXITSTATUS=1 + if ! restore_levels "$TARGET_CARD" ; then + sanify_levels "$TARGET_CARD" || EXITSTATUS=1 + restore_levels "$TARGET_CARD" >/dev/null 2>&1 || : + fi + log_action_end_msg_and_exit "$EXITSTATUS" + ;; + stop) + EXITSTATUS=0 + TARGET_CARD="$2" + case "$TARGET_CARD" in + ""|all) TARGET_CARD=all ; log_action_begin_msg "Shutting down ALSA" ;; + *) log_action_begin_msg "Shutting down ALSA card ${TARGET_CARD}" ;; + esac + card_OK "$TARGET_CARD" || log_action_end_msg_and_exit "$( [ ! "$2" ] ; echo $? ; )" "none loaded" + store_levels "$TARGET_CARD" || EXITSTATUS=1 + #mute_and_zero_levels "$TARGET_CARD" || EXITSTATUS=1 + log_action_end_msg_and_exit "$EXITSTATUS" + ;; + restart|force-reload) + EXITSTATUS=0 + $0 stop || EXITSTATUS=1 + $0 start || EXITSTATUS=1 + exit $EXITSTATUS + ;; + reset) + TARGET_CARD="$2" + case "$TARGET_CARD" in + ""|all) TARGET_CARD=all ; log_action_begin_msg "Resetting ALSA" ;; + *) log_action_begin_msg "Resetting ALSA card ${TARGET_CARD}" ;; + esac + card_OK "$TARGET_CARD" || log_action_end_msg_and_exit "$( [ ! "$2" ] ; echo $? ; )" "none loaded" + preinit_levels "$TARGET_CARD" + sanify_levels "$TARGET_CARD" + log_action_end_msg_and_exit "$?" + ;; + *) + echo "Usage: $MYNAME {start [CARD]|stop [CARD]|restart [CARD]|reset [CARD]}" >&2 + exit 3 + ;; +esac + diff --git a/x2gothinclient-chroot/patchsets/alsa-utils.wheezy/utils.sh b/x2gothinclient-chroot/patchsets/alsa-utils.wheezy/utils.sh new file mode 100644 index 0000000..0d07caf --- /dev/null +++ b/x2gothinclient-chroot/patchsets/alsa-utils.wheezy/utils.sh @@ -0,0 +1,182 @@ +# Shell snippet. + +bugout() { echo "${MYNAME}: Programming error" >&2 ; exit 123 ; } + +echo_card_indices() +{ + if [ -f /proc/asound/cards ] ; then + sed -n -e's/^[[:space:]]*\([0-7]\)[[:space:]].*/\1/p' /proc/asound/cards + fi +} + +filter_amixer_output() +{ + sed \ + -e '/Unable to find simple control/d' \ + -e '/Unknown playback setup/d' \ + -e '/^$/d' +} + +# The following functions try to set many controls. +# No card has all the controls and so some of the attempts are bound to fail. +# Because of this, the functions can't return useful status values. + +# $1 <control> +# $2 <level> +# $CARDOPT +unmute_and_set_level() +{ + { [ "$2" ] && [ "$CARDOPT" ] ; } || bugout + HOME=$ALSACTLHOME amixer $CARDOPT -q set "$1" "$2" unmute 2>&1 | filter_amixer_output || : + return 0 +} + +# $1 <control> +# $CARDOPT +mute_and_zero_level() +{ + { [ "$1" ] && [ "$CARDOPT" ] ; } || bugout + HOME=$ALSACTLHOME amixer $CARDOPT -q set "$1" "0%" mute 2>&1 | filter_amixer_output || : + return 0 +} + +# $1 <control> +# $2 "on" | "off" +# $CARDOPT +switch_control() +{ + { [ "$2" ] && [ "$CARDOPT" ] ; } || bugout + HOME=$ALSACTLHOME amixer $CARDOPT -q set "$1" "$2" 2>&1 | filter_amixer_output || : + return 0 +} + +# $1 <card ID> +sanify_levels_on_card() +{ + CARDOPT="-c $1" + + unmute_and_set_level "Master" "80%" + unmute_and_set_level "Master Mono" "80%" # See Bug#406047 + unmute_and_set_level "Master Digital" "80%" # E.g., cs4237B + unmute_and_set_level "Playback" "80%" + unmute_and_set_level "Headphone" "70%" + unmute_and_set_level "PCM" "80%" + unmute_and_set_level "PCM,1" "80%" # E.g., ess1969 + unmute_and_set_level "DAC" "80%" # E.g., envy24, cs46xx + unmute_and_set_level "DAC,0" "80%" # E.g., envy24 + unmute_and_set_level "DAC,1" "80%" # E.g., envy24 + unmute_and_set_level "Synth" "80%" + unmute_and_set_level "CD" "80%" + + mute_and_zero_level "Mic" + mute_and_zero_level "IEC958" # Ubuntu #19648 + + # Intel P4P800-MX (Ubuntu bug #5813) + switch_control "Master Playback Switch" on + switch_control "Master Surround" on + + # Trident/YMFPCI/emu10k1: + unmute_and_set_level "Wave" "80%" + unmute_and_set_level "Music" "80%" + unmute_and_set_level "AC97" "80%" + + # DRC: + unmute_and_set_level "Dynamic Range Compression" "80%" + + # Required for HDA Intel (hda-intel): + unmute_and_set_level "Front" "80%" + unmute_and_set_level "Master Front" "80%" + + # Required for SB Live 7.1/24-bit (ca0106): + unmute_and_set_level "Analog Front" "80%" + + # Required at least for Via 823x hardware on DFI K8M800-MLVF Motherboard with kernels 2.6.10-3/4 (see ubuntu #7286): + switch_control "IEC958 Capture Monitor" off + + # Required for hardware allowing toggles for AC97 through IEC958, + # valid values are 0, 1, 2, 3. Needs to be set to 0 for PCM1. + unmute_and_set_level "IEC958 Playback AC97-SPSA" "0" + + # Required for newer Via hardware (see Ubuntu #31784) + unmute_and_set_level "VIA DXS,0" "80%" + unmute_and_set_level "VIA DXS,1" "80%" + unmute_and_set_level "VIA DXS,2" "80%" + unmute_and_set_level "VIA DXS,3" "80%" + + # Required on some notebooks with ICH4: + switch_control "Headphone Jack Sense" off + switch_control "Line Jack Sense" off + + # Some machines need one or more of these to be on; + # others need one or more of these to be off: + # + # switch_control "External Amplifier" on + # switch_control "Audigy Analog/Digital Output Jack" on + # switch_control "SB Live Analog/Digital Output Jack" on + + # D1984 -- Thinkpad T61/X61 + switch_control "Speaker" on + switch_control "Headphone" on + + # HDA-Intel w/ "Digital" capture mixer (See Ubuntu #193823) + unmute_and_set_level "Digital" "80%" + + # On MacBookPro5,3 and later models (See Bug#597791) + unmute_and_set_level "Front Speaker" "80%" + # On MacBook5,2 models (See Bug#602973) + unmute_and_set_level "LFE" "80%" + + # On Intel 82801H (See Bug#603550) + unmute_and_set_level "Speaker" "80%" + + return 0 +} + +# $1 <card ID> | "all" +sanify_levels() +{ + TTSDML_RETURNSTATUS=0 + case "$1" in + all) + for CARD in $(echo_card_indices) ; do + sanify_levels_on_card "$CARD" || TTSDML_RETURNSTATUS=1 + done + ;; + *) + sanify_levels_on_card "$1" || TTSDML_RETURNSTATUS=1 + ;; + esac + return $TTSDML_RETURNSTATUS +} + +# $1 <card ID> +preinit_levels_on_card() +{ + CARDOPT="-c $1" + + # Silly dance to activate internal speakers by default on PowerMac + # Snapper and Tumbler + id=$(cat /proc/asound/card$1/id 2>/dev/null) + if [ "$id" = "Snapper" -o "$id" = "Tumbler" ]; then + switch_control "Auto Mute" off + switch_control "PC Speaker" off + switch_control "Auto Mute" on + fi +} + +# $1 <card ID> | "all" +preinit_levels() +{ + TTSDML_RETURNSTATUS=0 + case "$1" in + all) + for CARD in $(echo_card_indices) ; do + preinit_levels_on_card "$CARD" || TTSDML_RETURNSTATUS=1 + done + ;; + *) + preinit_levels_on_card "$1" || TTSDML_RETURNSTATUS=1 + ;; + esac + return $TTSDML_RETURNSTATUS +} diff --git a/x2gothinclientmanagement/sbin/x2gothinclient_create b/x2gothinclientmanagement/sbin/x2gothinclient_create index c59e062..b363f1f 100755 --- a/x2gothinclientmanagement/sbin/x2gothinclient_create +++ b/x2gothinclientmanagement/sbin/x2gothinclient_create @@ -213,6 +213,13 @@ fi [ \$? -eq 0 ] && test -e /etc/init.d/alsa-utils && sed "s/^ALSACTLHOME=/export ALSACTLHOME=/" -i /etc/init.d/alsa-utils || true [ \$? -eq 0 ] && test -e /usr/share/alsa/utils.sh && sed "s/amixer \\\$CARDOPT/HOME=\\\$ALSACTLHOME amixer \\\$CARDOPT/g" -i /usr/share/alsa/utils.sh || true +### +### apply patchsets if provided +### +# we will use our own alsa-utils init script for Debian wheezy chroots (very similar to the version found in Debian jessie): work around Debian bug #729373. +[ \$? -eq 0 ] && if [ "\$TC_DISTRO_CODENAME" == "wheezy" ]; then cp /usr/share/x2go/tce/patchsets/alsa-utils.wheezy/alsa-utils /etc/init.d/; cp /usr/share/x2go/tce/patchsets/alsa-utils.wheezy/utils.sh /usr/share/alsa/; fi +[ \$? -eq 0 ] && if [ "\$TC_DISTRO_CODENAME" == "jessie" ]; then cp /usr/share/x2go/tce/patchsets/alsa-utils.wheezy/alsa-utils /etc/init.d/; cp /usr/share/x2go/tce/patchsets/alsa-utils.wheezy/utils.sh /usr/share/alsa/; fi + # update all (mostly only one) initrd.img files [ \$? -eq 0 ] && update-initramfs -u -v -k all hooks/post-receive -- x2gothinclient.git (X2Go Thin Client Environment) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "x2gothinclient.git" (X2Go Thin Client Environment).