Переход на HDMI Audio, когда HDMI подключен к ноутбуку (14.04)

scp myname@login1.imbig.cc.mycoll.zz:myfirst.txt .

Здесь вы используете scp с двумя аргументами. Первый - это источник, удаленный файл: myname@login1.imbig.cc.mycoll.zz:myfirst.txt. Последним аргументом является назначение. В вашем случае: .. . - текущий каталог, поэтому файл будет в вашем текущем каталоге.

Если вы хотите, чтобы он переместился в другое место, укажите другой каталог, например

scp myname@login1.imbig.cc.mycoll.zz:myfirst.txt /tmp
[d2 ] Это скопирует его в / tmp

Вы также можете указать новое имя для него. Например,

scp myname@login1.imbig.cc.mycoll.zz:myfirst.txt /tmp/info.txt
1
задан 27 January 2018 в 15:21

6 ответов

На основании этой ссылки и этой ссылки ... я тестировал и WORKS FINE ubuntu 14.04

вы должны создать правило в /etc/udev/rules.d/100-hdmi_sound.rules

с этим контентом

SUBSYSTEM=="drm", ACTION=="change", RUN+="/lib/udev/hdmi_sound_toggle.sh"

затем создайте

sudo -H gedit /lib/udev/hdmi_sound_toggle.sh

с вашим контентом

#!/bin/bash

HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
if [ $HDMI_STATUS = "connected" ]
then
    pactl set-card-profile 0 output:hdmi-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo  &> /dev/null; done
else
    pactl set-card-profile 0 output:analog-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo  &> /dev/null; done
fi

Надеюсь, что может помочь .. для моего английского, я говорил по-испански

6
ответ дан 24 May 2018 в 08:23

После этого у меня были проблемы. Я скопировал исходный скрипт и изменил его, как было предложено, и теперь он работает.

Я включаю его здесь, чтобы облегчить кому-то использование.

#!/bin/bash
## From: https://askubuntu.com/questions/458194/switching-to-hdmi-audio-when-hdmi-is-plugged-into-a-laptop-14-04
## Script needs to be triggered by a udev rule
## Works manually now

##source ${HOME}/bin/bash_trace
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

if [ $HDMI_STATUS = "connected" ]
then
    pactl set-card-profile 0 output:hdmi-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo  &> /dev/null; done
else
    pactl set-card-profile 0 output:analog-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo  &> /dev/null; done
fi

Теперь я 'просто хотел бы запустить его с udev, но я не знаю, как это сделать.

3
ответ дан 24 May 2018 в 08:23

Ну, все предоставленные скрипты не работали для меня (Ubuntu 16.04), но я нашел индикатор этого приложения, который позволяет вам изменять звуковой вывод всего одним щелчком мыши:

Я нашел

(обратите внимание: вам нужно сначала установить пакет appindicator: sudo apt-get install python-appindicator)

Просто подумал, что оставлю это здесь для других, которые могут быть в том же как я, хотя это альтернативное решение ... но это делает его довольно простым и дискретным; -)

2
ответ дан 24 May 2018 в 08:23

Представленные сценарии не работали для меня с udev из коробки на Ubuntu 14.04, мне пришлось добавить:

export DISPLAY=:0

в начале, преобразовать две команды pacmd в pactl и, наконец, запустите скрипт, используя sudo -s -u (пользователь) из правила udev.

#!/bin/bash
## From: https://askubuntu.com/questions/458194/switching-to-hdmi-audio-when-hdmi-is-plugged-into-a-laptop-14-04
## Script needs to be triggered by a udev rule
## Works manually now

export DISPLAY=:0

##source ${HOME}/bin/bash_trace
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pactl list sink-inputs | grep Input | awk '{print $3}' | sed -r 's/^.{1}//')

if [ $HDMI_STATUS = "connected" ]
then
    pactl set-card-profile 0 output:hdmi-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
    for i in ${INPUTS[*]}; do pactl move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo  &> /dev/null; done
else
    pactl set-card-profile 0 output:analog-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    for i in ${INPUTS[*]}; do pactl move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo  &> /dev/null; done
fi
2
ответ дан 24 May 2018 в 08:23

Опять другое решение (проверено в 16.04) на основе предыдущего, но с некоторыми улучшениями, которые работают с использованием правильного pactl, указывающего на правильный сервер (его можно улучшить, чтобы автоматически получать имена карт и профилей, см. или pactl info на данный момент).

#!/bin/bash

USER_NAME=$(who | grep tty$(sudo fgconsole) | cut -f1 -d' ')
USER_ID=$(id -u "$USER_NAME")
HDMI_STATUS=$(</sys/class/drm/card0/*HDMI*/status)

HDMI_CARD="pci-0000_00_03.0"
HDMI_PROFILE="hdmi-stereo-extra1"

INTERNAL_CARD="pci-0000_00_1b.0"
INTERNAL_PROFILE="analog-stereo"

export LANG=C
export PULSE_SERVER="unix:/run/user/$USER_ID/pulse/native"

function pactl_cmd() {
  sudo -u $USER_NAME pactl --server $PULSE_SERVER $*
}

if [ "$HDMI_STATUS" = "connected" ]; then
  CARD=$HDMI_CARD
  OUTPUT=$HDMI_PROFILE
else
  CARD=$INTERNAL_CARD
  OUTPUT=$INTERNAL_PROFILE
fi

pactl_cmd set-default-sink alsa_output.$CARD.$OUTPUT
pactl_cmd set-card-profile alsa_card.$CARD output:$OUTPUT

INPUTS=($(pactl_cmd list sink-inputs | grep "^Sink Input #"|cut -d# -f2))
for i in ${INPUTS[*]}; do
  pactl_cmd move-sink-input $i alsa_output.$CARD.$OUTPUT
done

Связанный объект здесь.

0
ответ дан 24 May 2018 в 08:23
  • 1
    У меня был похожий скрипт, который работал с помощью card0, но однажды он переключился на card1, поэтому я изменил сценарий, а на следующий день он снова вернулся к card0. В конце я изменил код на card*, и с тех пор все хорошо. Просто голова, если что-то подобное случится с тобой. – WinEunuuchs2Unix 8 February 2017 в 04:06

Скрипты Udev выполняются с правами администратора, но вы также должны знать, какой менеджер отображения вы используете.

Найти DM, который вы используете:

pgrep -a Xorg

См. Параметр -auth, он покажет вам, что вы используете. диспетчер дисплея. Это может быть sddm ou lightdm в последних версиях Ubuntu.

Эта строка должна быть экспортирована как переменная XAUTHORITY, например:

ls /car/run/sddm*

, например, это может быть допустимый вывод :

/var/lib/mdm/:0.Xauth (Это будет использоваться скриптом)

Вот как выглядит ваш скрипт:

Это позволит вашему диспетчеру дисплея изменить выход HDMI. Следуйте за вкладками, чтобы создать файлы правил udev и сделать исполняемый файл сценария.

0
ответ дан 24 May 2018 в 08:23

Другие вопросы по тегам:

Похожие вопросы: