[X2Go-Commits] x2gothinclient.git - master (branch) updated: 1.1.0.0-30-g937fd25

X2Go dev team git-admin at x2go.org
Wed Nov 20 12:48:35 CET 2013


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 at 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).




More information about the x2go-commits mailing list