Advertisement
Guest User

Untitled

a guest
Jan 11th, 2022
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.79 KB | None | 0 0
  1. #!/bin/sh
  2. #
  3. # alsa-utils initscript
  4. #
  5. ### BEGIN INIT INFO
  6. # Provides: alsa-utils
  7. # Required-Start: $local_fs $remote_fs
  8. # Required-Stop: $remote_fs
  9. # Default-Start: S
  10. # Default-Stop: 0 1 6
  11. # Short-Description: Restore and store ALSA driver settings
  12. # Description: This script stores and restores mixer levels on
  13. # shutdown and bootup.On sysv-rc systems: to
  14. # disable storing of mixer levels on shutdown,
  15. # remove /etc/rc[06].d/K50alsa-utils. To disable
  16. # restoring of mixer levels on bootup, rename the
  17. # "S50alsa-utils" symbolic link in /etc/rcS.d/ to
  18. # "K50alsa-utils".
  19. ### END INIT INFO
  20.  
  21. # Don't use set -e; check exit status instead
  22.  
  23. # Exit silently if package is no longer installed
  24. [ -x /usr/sbin/alsactl ] || exit 0
  25.  
  26. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  27. MYNAME=/etc/init.d/alsa-utils
  28. ALSACTLHOME=/run/alsa
  29.  
  30. [ -d "$ALSACTLHOME" ] || mkdir -p "$ALSACTLHOME"
  31.  
  32. . /lib/lsb/init-functions
  33. . /usr/share/alsa/utils.sh
  34.  
  35. # $1 EXITSTATUS
  36. # [$2 MESSAGE]
  37. log_action_end_msg_and_exit()
  38. {
  39. log_action_end_msg "$1" ${2:+"$2"}
  40. exit $1
  41. }
  42.  
  43. # $1 PROGRAM
  44. executable()
  45. {
  46. # If which is not available then we must be running before
  47. # /usr is mounted on a system that has which in /usr/bin/.
  48. # Conclude that $1 is not executable.
  49. [ -x /bin/which ] || [ -x /usr/bin/which ] || return 1
  50. which "$1" >/dev/null 2>&1
  51. }
  52.  
  53. executable amixer || { echo "${MYNAME}: Error: No amixer program available." >&2 ; exit 1 ; }
  54.  
  55. # $1 <card ID> | "all"
  56. restore_levels()
  57. {
  58. [ -f /var/lib/alsa/asound.state ] || return 1
  59. CARD="$1"
  60. [ "$1" = all ] && CARD=""
  61. # Assume that if alsactl prints a message on stderr
  62. # then it failed somehow. This works around the fact
  63. # that alsactl doesn't return nonzero status when it
  64. # can't restore settings for the card
  65. if MSG="$(alsactl -E HOME="$ALSACTLHOME" -E XDG_RUNTIME_DIR="${ALSACTLRUNTIME}" restore $CARD 2>&1 >/dev/null)" && [ ! "$MSG" ] ; then
  66. return 0
  67. else
  68. # Retry with the "force" option. This restores more levels
  69. # but it results in much longer error messages.
  70. alsactl -E HOME="$ALSACTLHOME" -E XDG_RUNTIME_DIR="${ALSACTLRUNTIME}" -F restore $CARD >/dev/null 2>&1
  71. log_action_cont_msg "warning: 'alsactl -E HOME="$ALSACTLHOME" -E XDG_RUNTIME_DIR="${ALSACTLRUNTIME}" restore${CARD:+ $CARD}' failed with error message '$MSG'"
  72. return 1
  73. fi
  74. }
  75.  
  76. # $1 <card ID> | "all"
  77. store_levels()
  78. {
  79. CARD="$1"
  80. [ "$1" = all ] && CARD=""
  81. if MSG="$(alsactl -E HOME="$ALSACTLHOME" -E XDG_RUNTIME_DIR="${ALSACTLRUNTIME}" store $CARD 2>&1)" ; then
  82. sleep 1
  83. return 0
  84. else
  85. log_action_cont_msg "warning: 'alsactl store${CARD:+ $CARD}' -E HOME="$ALSACTLHOME" -E XDG_RUNTIME_DIR=@alsactlruntime@ failed with error message '$MSG'"
  86. return 1
  87. fi
  88. }
  89.  
  90.  
  91. # $1 <card ID>
  92. mute_and_zero_levels_on_card()
  93. {
  94. CARDOPT="-c $1"
  95. for CTL in \
  96. Master \
  97. PCM \
  98. Synth \
  99. CD \
  100. Line \
  101. Mic \
  102. "PCM,1" \
  103. Wave \
  104. Music \
  105. AC97 \
  106. "Master Digital" \
  107. DAC \
  108. "DAC,0" \
  109. "DAC,1" \
  110. Headphone \
  111. Speaker \
  112. Playback
  113. do
  114. mute_and_zero_level "$CTL"
  115. done
  116. # for CTL in \
  117. # "Audigy Analog/Digital Output Jack" \
  118. # "SB Live Analog/Digital Output Jack"
  119. # do
  120. # switch_control "$CTL" off
  121. # done
  122. return 0
  123. }
  124.  
  125. # $1 <card ID> | "all"
  126. mute_and_zero_levels()
  127. {
  128. TTZML_RETURNSTATUS=0
  129. case "$1" in
  130. all)
  131. for CARD in $(echo_card_indices) ; do
  132. mute_and_zero_levels_on_card "$CARD" || TTZML_RETURNSTATUS=1
  133. done
  134. ;;
  135. *)
  136. mute_and_zero_levels_on_card "$1" || TTZML_RETURNSTATUS=1
  137. ;;
  138. esac
  139. return $TTZML_RETURNSTATUS
  140. }
  141.  
  142.  
  143. # $1 <card ID> | "all"
  144. card_OK()
  145. {
  146. [ "$1" ] || bugout
  147. if [ "$1" = all ] ; then
  148. [ -d /proc/asound ]
  149. return $?
  150. else
  151. [ -d "/proc/asound/card$1" ] || [ -d "/proc/asound/$1" ]
  152. return $?
  153. fi
  154. }
  155.  
  156. # If a card identifier is provided in $2 then regard it as an error
  157. # if that card is not present; otherwise don't regard it as an error.
  158.  
  159. case "$1" in
  160. start)
  161. EXITSTATUS=0
  162. TARGET_CARD="$2"
  163. case "$TARGET_CARD" in
  164. ""|all) TARGET_CARD=all ; log_action_begin_msg "Setting up ALSA" ;;
  165. *) log_action_begin_msg "Setting up ALSA card ${TARGET_CARD}" ;;
  166. esac
  167. card_OK "$TARGET_CARD" || log_action_end_msg_and_exit "$( [ ! "$2" ] ; echo $? ; )" "none loaded"
  168. preinit_levels "$TARGET_CARD" || EXITSTATUS=1
  169. if ! restore_levels "$TARGET_CARD" ; then
  170. sanify_levels "$TARGET_CARD" || EXITSTATUS=1
  171. restore_levels "$TARGET_CARD" >/dev/null 2>&1 || :
  172. fi
  173. log_action_end_msg_and_exit "$EXITSTATUS"
  174. ;;
  175. stop)
  176. EXITSTATUS=0
  177. TARGET_CARD="$2"
  178. case "$TARGET_CARD" in
  179. ""|all) TARGET_CARD=all ; log_action_begin_msg "Shutting down ALSA" ;;
  180. *) log_action_begin_msg "Shutting down ALSA card ${TARGET_CARD}" ;;
  181. esac
  182. card_OK "$TARGET_CARD" || log_action_end_msg_and_exit "$( [ ! "$2" ] ; echo $? ; )" "none loaded"
  183. store_levels "$TARGET_CARD" || EXITSTATUS=1
  184. #mute_and_zero_levels "$TARGET_CARD" || EXITSTATUS=1
  185. log_action_end_msg_and_exit "$EXITSTATUS"
  186. ;;
  187. restart|force-reload)
  188. EXITSTATUS=0
  189. $0 stop || EXITSTATUS=1
  190. $0 start || EXITSTATUS=1
  191. exit $EXITSTATUS
  192. ;;
  193. reset)
  194. TARGET_CARD="$2"
  195. case "$TARGET_CARD" in
  196. ""|all) TARGET_CARD=all ; log_action_begin_msg "Resetting ALSA" ;;
  197. *) log_action_begin_msg "Resetting ALSA card ${TARGET_CARD}" ;;
  198. esac
  199. card_OK "$TARGET_CARD" || log_action_end_msg_and_exit "$( [ ! "$2" ] ; echo $? ; )" "none loaded"
  200. preinit_levels "$TARGET_CARD"
  201. sanify_levels "$TARGET_CARD"
  202. log_action_end_msg_and_exit "$?"
  203. ;;
  204. *)
  205. echo "Usage: $MYNAME {start [CARD]|stop [CARD]|restart [CARD]|reset [CARD]}" >&2
  206. exit 3
  207. ;;
  208. esac
  209.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement