Жесткий предел может только быть повышен корнем (любой процесс может понизить его). Таким образом, это полезно для безопасности: некорневой процесс не может переступить через жесткий предел. Но это неудобно в этом, некорневой процесс не может иметь нижнего предела, чем его дети.
Мягкий предел может быть изменен процессом в любое время. Таким образом, это удобно, пока процессы сотрудничают, но отрицательный результат для безопасности.
Типичный вариант использования для мягких пределов состоит в том, чтобы отключить дампы ядра (ulimit -Sc 0
) при хранении опции включения их для определенного процесса Вы отлаживаете ((ulimit -Sc unlimited; myprocess)
).
ulimit
команда оболочки является оберткой вокруг setrlimit
системный вызов, таким образом, это - то, где Вы найдете категорическую документацию.
Обратите внимание, что некоторые системы не могут реализовать все пределы. А именно, некоторые системы не поддерживают пределы для каждого процесса на дескрипторы файлов (Linux делает); если Ваш не делает, команда оболочки может быть нет.
В этом случае карта всегда является тем же. Что изменяется между переключателем, и другой - "профиль карты".
Таким образом, решение, которое на самом деле работало:
pacmd set-card-profile <cardindex> <profilename>
В моем случае я нашел все профили карты с:
pacmd list-cards
И после того, как я могу переключиться между монитором и громкоговорителями переносного компьютера с:
pacmd set-card-profile 0 output:hdmi-stereo
И:
pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo
Где 0 индекс карты:
pacmd list-cards
Welcome to PulseAudio! Use "help" for usage information.
>>> 1 card(s) available.
index: 0
name: <alsa_card.pci-0000_00_1b.0>
И наконец, для переключений быстрее, я настроил два, искажают в моем .bashrc файле:
alias audio-hdmi='pacmd set-card-profile 0 output:hdmi-stereo+input:analog-stereo'
alias audio-laptop='pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo'
Таким образом, я могу переключиться между аудио от монитора или от ноутбука (наушники) ввод в оболочке: аудио HDMI или аудио ноутбук
Можно использовать pactl
, прочитайте его страницу справочника для получения дополнительной информации.
Можно попробовать этот сценарий: https://github.com/giner/helplinux/tree/master/scripts/switch-sound
Протестированный на Ubuntu 10.04 - 13.04 и дуге Linux
Я записал маленький апплет индикатора, который позволяет Вам переключить звуковой вывод. Никакой сценарий оболочки, но возможно полезный Вам или другим читателям.
Я создал очень маленький сценарий на основе предыдущих, который не только переключает аудио, но также и видеовыход. Это использует disper для переключения между дисплеями.
Вот код:
#!/bin/bash
CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)
if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo>" ]; then
pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
disper -s
else
pacmd set-card-profile 0 "output:hdmi-stereo"
disper -S
fi
Для меня это особенно полезно, так как мне не нравится клонировать дисплеи. Я или использую один или другой. Вы, возможно, должны адаптировать профили аудио к своей определенной системе.
Питоновый скрипт Лукаса (https://github.com/lkettenb/sound-output-switcher, размещенный выше) для реализации нотификационного апплета работает хорошо. Ему нужен пакет appindicator. Он может быть установлен с помощью
sudo apt-get install python-appindicator
Как я уже сказал здесь (вероятно, дубликат), альтернатива Индикатору переключателя звука (который требует добавления PPA):
В моем случае это профиль hdmi-stereo-extra1 + input
, поэтому в одной строке будет: [[$ (pacmd list-cards | grep "active profile" | cut -d "" -f 3-) = "
.
Вы можете использовать пользовательский ярлык , чтобы запустить его с помощью bash -c
(предупредит вас, если есть какой-либо конфликт с другим ярлыком):
Также вы можете добавить псевдоним
для вашего .bashrc
.
я внес некоторые изменения на основе ответа @ user829996 (а здесь @ user56655):
#!/bin/bash
set -euo pipefail # strict mode
activeProfile() { pacmd list-cards | grep "active profile" | cut -d " " -f 3-; }
CURRENT_PROFILE="$(eval activeProfile)"
# If it doesn't work run pacmd list-cards and try the other outputs from profile section
ANALOG_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo-extra1+input:analog-stereo"
if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo-extra1+input:analog-stereo>" ] ; then
pacmd set-card-profile 0 "$ANALOG_PROFILE"
else
pacmd set-card-profile 0 "$HDMI_PROFILE"
fi
activeProfile
Я создал следующий скрипт Python, который делает следующее:
#!/usr/bin/env python3
import subprocess
# Toggle default device to the next device (wrap around the list)
cards_info = subprocess.run(['pacmd','list-sinks'], stdout=subprocess.PIPE)
card_indexes = subprocess.run(['grep', 'index'], stdout=subprocess.PIPE, input=cards_info.stdout)
indexes_list = card_indexes.stdout.decode().splitlines()
card_descriptions = subprocess.run(['grep', 'device.description'], stdout=subprocess.PIPE, input=cards_info.stdout)
indices = [i for i, s in enumerate(indexes_list) if '*' in s]
if (len(indices) != 1):
print("Error finding default device")
exit(1)
default_index = indices[0]
next_default = 0
if (default_index != (len(indexes_list) - 1)):
next_default = default_index + 1
next_default_index = (indexes_list[next_default].split("index: ",1)[1])
subprocess.run(['pacmd','set-default-sink %s' %(next_default_index)], stdout=subprocess.PIPE)
# Move all existing applications to the new default device
inputs_info = subprocess.run(['pacmd','list-sink-inputs'], stdout=subprocess.PIPE)
inputs_indexes = subprocess.run(['grep', 'index'], stdout=subprocess.PIPE, input=inputs_info.stdout)
inputs_indexes_list = inputs_indexes.stdout.decode().splitlines()
for line in inputs_indexes_list:
input_index = (line.split("index: ",1)[1])
subprocess.run(['pacmd','move-sink-input %s %s' %(input_index, next_default_index)], stdout=subprocess.PIPE)
# Send notification to the GUI
descriptions_list = card_descriptions.stdout.decode().splitlines()
if (len(descriptions_list) == len(indexes_list)):
description = (descriptions_list[next_default].split("= ",1)[1])[1:-1]
args = ["notify-send", "Default audio card changed", 'Default audio card was set to %s' %(description)]
subprocess.run(args, stdout=subprocess.PIPE)
Назначил скрипту сочетание клавиш, и теперь моя жизнь счастлива
Если полезно. У меня есть bluetooth-наушники, и мне нужно было настроить для них переключение между гарнитурой и профилями a2dp. Решено добавлением этих функций:
talk() {
card=$(pacmd list-cards | grep 'name:' | grep bluez | cut -d: -f2 | sed -e 's/[< >]//g')
pacmd set-card-profile $card headset_head_unit
}
mus() {
card=$(pacmd list-cards | grep 'name:' | grep bluez | cut -d: -f2 | sed -e 's/[< >]//g')
pacmd set-card-profile $card a2dp_sink
}