Автор Тема: Приёмы профессиональной работы в shell (справочник - вопросы не задавать. )  (Прочитано 174587 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Комфорт после катаклизмов?, - это возможно.

Унификация в bash
или
если не перечитался /etc/inputrc

Файл /etc/inputrc содержит коды комбинаций клавиш применяемых в bash. Например перемешения курсора на символ или слово вперёд и т.д.

Что делать если файл не прочитался, не доступен или его содержимое в разных Линукс сильно различается, а редактируемые строки длинные?
http://www.gnu.org/software/bash/manual/html_node/Commands-For-Moving.html
Цитировать
8.4.1 Commands For Moving

beginning-of-line (C-a)
    Переместить курсор в начало текущей строки.

end-of-line (C-e)
    Переместить курсор в конец строки.

forward-char (C-f)
    Переместить курсор на символ вперёд.

backward-char (C-b)
    Переместить курсор на символ назад.

forward-word (M-f)
    Переместить курсор в конец следующего слова. Слова состоят из букв и цифр.

backward-word (M-b)
    Переместить курсор назад в начало текущего или предыдущего слова. Слова состоят из букв и цифр.
C -- Ctrl
M -- Alt
Например комбинация (C-a) означает Ctrl+a

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
assembly of the npapi-plugin-adobe-flash package:

Unpack package
$ rpm -i adobe-flash-player-25-alt0.M70P.1.src.rpm

Current build packages
$ rpm -qa --qf '%{NAME}\n'|grep rpm-|sort
rpm-build
rpm-build-browser-plugins
rpm-build-gir
rpm-build-perl
rpm-build-python
rpm-build-python3
rpm-build-xdg
rpm-macros-alterator
rpm-macros-alternatives
rpm-macros-cmake

Needed packages for build
# apt-get install libgtk+2-devel

Download packages version 25.0.0.171 from
https://get.adobe.com/flashplayer/otherversions/
flash_player_npapi_linux.i386.tar.gz
flash_player_npapi_linux.x86_64.tar.gz

Change download directory.

Unpack *.tar.gz and rename
$ 7z x flash_player_npapi_linux.i386.tar.gz  -O./flash-npapi
$ mv ./flash-npapi/libflashplayer.so.tar ./flash-npapi/flash_player-x86-25.0.0.171.tar
$ 7z x flash_player_npapi_linux.x86_64.tar.gz  -O./flash-npapi
$ mv ./flash-npapi/libflashplayer.so.tar ./flash-npapi/flash_player-x86_64-25.0.0.171.tar

Make adobe_flash_player_eula.desktop file
$ cat adobe_flash_player_eula.desktop
[Desktop Entry]
Type=Application
Name=Adobe Flash Plugin License Terms
GenericName=License Agreement
GenericName[ru]=Лицензионное соглашение
Icon=flash-player-properties
Exec=xdg-open http://www.adobe.com/legal/licenses-terms.html
Categories=AudioVideo;

Move *.tar and *.desktop files to directory
$HOME/RPM/SOURCES

Change version of the plugin in spec

Build package
$ rpm -ba --target i586 ~/RPM/SPECS/adobe-flash-player.spec

Перед сборкой можно сменить hostname, а собирать под пользователем builder не высвечивая логин.
Этот текст на грубом английском, - прочесть его можно и при вдребезги разломанной локали.
« Последнее редактирование: 08.05.2018 01:11:09 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Температура процессора в ноутбуках использующих адаптер виртуального устройства
acpitz-virtual-0

Откуда берёт acpi client и что отображает командой
$ acpi --thermal

в таких ноутбуках:
- Последняя строка в каждом выводе, это температура процессора Pentium M 770, -
т.е. Thermal 3 и thermal_zone0
# acpi -t ; grep . /sys/devices/virtual/thermal/thermal_zone{3,2,1,0}/temp
Thermal 0: ok, 40.0 degrees C
Thermal 1: ok, 24.9 degrees C
Thermal 2: ok, 46.0 degrees C
Thermal 3: ok, 47.0 degrees C
/sys/devices/virtual/thermal/thermal_zone3/temp:40000
/sys/devices/virtual/thermal/thermal_zone2/temp:24900
/sys/devices/virtual/thermal/thermal_zone1/temp:46000
/sys/devices/virtual/thermal/thermal_zone0/temp:47000


Этот скрипт делает то же, что и команда
acpi -t

но отображает только температуру процессора
$ tcpu=`cat /sys/devices/virtual/thermal/thermal_zone0/temp`; \
tempcpu=`echo "$tcpu/1000"|bc -l|sed 's/^\(....\).*/\1/'`; \
echo -e "\nCPU Temperature:" "$tempcpu\n"

CPU Temperature: 50.0



По мотивам поднятой темы:
https://forum.altlinux.org/index.php?topic=33653.msg241632#msg241632
https://forum.altlinux.org/index.php?topic=33653.msg241641#msg241641
https://forum.altlinux.org/index.php?topic=33653.msg317238#msg317238
https://forum.altlinux.org/index.php?topic=33653.msg317296#msg317296
« Последнее редактирование: 18.12.2017 00:20:27 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Показать установленные в системе пакеты, которые требуют запрашиваемый установленный пакет

Листинг скрипта:
Каким установленным пакетам требуется пакет libwebp7 установленный в системе
# Reverse dependencies of the installed package
rdeppkg='libwebp7'; \
echo -e '\nСписок установленных пакетов у которых пакет' $rdeppkg 'в зависимостях\nПодождите пожалуйста...\n'; \
apt-get remove $rdeppkg -s|grep Remv|grep -v $rdeppkg|awk '{print $2}'|\
while read line; \
  do STR=`apt-cache depends $line|grep '^ '|grep -o $rdeppkg|wc -w`; \
    if [ "$STR" != 0 ]; \
      then rpm -qi $line|grep ^Name|awk '{print $3}';\
    fi; \
done; echo -e '\n'

Во второй строке смените имя пакета для которого нужно сделать запрос.
В листинге это пакет libwebp7.


Пример работы скрипта:
# # Reverse dependencies of the installed package
rdeppkg='libwebp7'; \
> echo -e '\nСписок установленных пакетов у которых пакет' $rdeppkg 'в зависимостях\nПодождите пожалуйста...\n'; \
> apt-get remove $rdeppkg -s|grep Remv|grep -v $rdeppkg|awk '{print $2}'|\
> while read line; \
>   do STR=`apt-cache depends $line|grep '^ '|grep -o $rdeppkg|wc -w`; \
>     if [ "$STR" != 0 ]; \
>       then rpm -qi $line|grep ^Name|awk '{print $3}';\
>     fi; \
> done; echo -e '\n'

Список установленных пакетов у которых пакет libwebp7 в зависимостях
Подождите пожалуйста...

fbi
libwebkit2gtk
gst-plugins-bad1.0
libImageMagick
libwebkitgtk2



Скрипт выполняется от root.


Усовершенствованная модифицированная версия скрипта:
# cat /usr/local/sbin/apt-search-pkgs-with-deps
#!/bin/bash
#
# Search for Packages that Require the Package:
# Search for installed packages that require the requested installed package
#


if [ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then

            echo
            echo "Search for installed packages"
            echo "that require the requested installed package"
            echo
            echo "Usage: `basename $0` [parameter]"
            echo
            echo "Parameters:"
            echo " package        installed package name"
            echo " -h, --help     this help"
            echo

exit 0
fi


instpkg=$(echo "$1"); \
echo -e '\nList of installed packages for which the package' $instpkg 'in dependencies\nPlease wait...\n'; \
apt-get remove $instpkg -s|grep Remv|grep -v $instpkg|awk '{print $2}'|\
while read line; \
  do STR=`apt-cache depends $line|grep '^ '|grep -o $instpkg|wc -w`; \
    if [ "$STR" != 0 ]; \
      then rpm -qi $line|grep ^Name|awk '{print $3}';\
    fi; \
done; echo -e '\n'
# apt-search-pkgs-with-deps --help

Search for installed packages
that require the requested installed package

Usage: apt-search-pkgs-with-deps [parameter]

Parameters:
 package        installed package name
 -h, --help     this help

Пример работы команды apt-search-pkgs-with-deps:
Команда apt-search-pkgs-with-deps ищет установленные пакеты у которых запрашиваемый установленный пакет в зависимостях.
Выброс команды apt-search-pkgs-with-deps говорит, что пакет libudev1 у многих важных пакетов в зависимостях.
# apt-search-pkgs-with-deps libudev1

List of installed packages for which the package libudev1 in dependencies
Please wait...

NetworkManager-adsl
NetworkManager-daemon
alterator-browser-qt5
libnm-glib4
libnm
ppp
udev-alsa
xorg-drv-vmmouse
xorg-drv-qxl
xorg-drv-nouveau
xorg-drv-intel
xorg-drv-radeon
xorg-server
xorg-drv-evdev
libqt5-eglfsdeviceintegration
libatasmart
libcolord
liblvm2
libdevmapper
libinput
libgudev
usbutils
util-linux
lsblk
libusb


« Последнее редактирование: 15.09.2018 13:53:23 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Как добавить видеорежим
Другое разрешение монитора


Имеющиеся разрешения
Здесь connected, это подключенное видеоустройство
$ xrandr
Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
LVDS1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 300mm x 230mm
   1024x768      60.00*+
   800x600       60.32    56.25 
   640x480       59.94 
   512x384       60.00 
TV1 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Генерируем Modeline, - формат ввода
cvt X Y VSync
$ cvt 720 540 60
# 720x540 59.51 Hz (CVT 0.39M3) hsync: 33.44 kHz; pclk: 30.50 MHz
Modeline "720x540_60.00"   30.50  720 752 816 912  540 543 547 562 -hsync +vsync

Добавляем новый видеорежим
$ xrandr --newmode "720x540_60.00"   30.50  720 752 816 912  540 543 547 562 -hsync +vsync

Добавляем новый видеорежим в список
$ xrandr --addmode LVDS1 720x540_60.00

Текущее разрешение:   1024x768      60.00*+
+  -  рекомендуемое
*  -  текущее
$ xrandr
Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
LVDS1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 300mm x 230mm
   1024x768      60.00*+
   800x600       60.32    56.25 
   640x480       59.94 
   512x384       60.00 
   720x540_60.00  59.51 
TV1 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Изменяем разрешение
$ xrandr --output LVDS1 --mode 720x540_60.00

Разрешение сменилось
$ xrandr
Screen 0: minimum 8 x 8, current 720 x 540, maximum 32767 x 32767
LVDS1 connected 720x540+0+0 (normal left inverted right x axis y axis) 300mm x 230mm
   1024x768      60.00 +
   800x600       60.32    56.25 
   720x540       59.51 
   640x480       59.94 
   512x384       60.00 
   720x540_60.00  59.51*
TV1 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Возвращаем на рекомендуемое
$ xrandr --output LVDS1 --auto
$ xrandr
Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
LVDS1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 300mm x 230mm
   1024x768      60.00*+
   800x600       60.32    56.25 
   640x480       59.94 
   512x384       60.00 
   720x540_60.00  59.51 
TV1 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Аналогично ещё меньший видеорежим, но с применением другой утилиты генерации Modeline - gtf
$ xrandr
Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
LVDS1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 300mm x 230mm
   1024x768      60.00*+
   800x600       60.32    56.25 
   640x480       59.94 
   512x384       60.00 
   720x540_60.00  59.51 
TV1 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
$ gtf 320 240 60

  # 320x240 @ 60.00 Hz (GTF) hsync: 14.94 kHz; pclk: 5.26 MHz
  Modeline "320x240_60.00"  5.26  320 304 336 352  240 241 244 249  -HSync +Vsync

$ xrandr --newmode "320x240_60.00"  5.26  320 304 336 352  240 241 244 249  -HSync +Vsync
$ xrandr --addmode LVDS1 320x240_60.00
$ xrandr
Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
LVDS1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 300mm x 230mm
   1024x768      60.00*+
   800x600       60.32    56.25 
   640x480       59.94 
   512x384       60.00 
   720x540_60.00  59.51 
   320x240_60.00  60.01 
TV1 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
$ xrandr --output LVDS1 --mode 320x240_60.00

Устанавливая неверные параметры вы рискуете повредить электронику

Примеры таблиц для монитора LG Flatron L1953S (Скриншоты и руководства)
http://cxem.net/ckfinder/userfiles/comments/53252_LG%20L17,1953S-xFS_EN.pdf
http://www.manualmonitor.com/manuals/lg/LG_Flatron_L1953S.pdf


Так когда-то выглядел xorg.conf:
24.12 Многие игры выводят изображение с частотой 60Гц. Как это исправить?
« Последнее редактирование: 01.11.2017 18:52:14 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Как посмотреть тип блочного устройства?

Имя устройства, тип устройства, используемый драйвер, алиас:
$ grep . /sys/block/*/device/{model,name,uevent}
/sys/block/sda/device/model:WDC WD5000LPCX-2
/sys/block/sdb/device/model:TransMemory
/sys/block/sdc/device/model:Transcend
/sys/block/sr0/device/model:DVD-RW DA8A6SH
/sys/block/mmcblk0/device/name:MMC02G
/sys/block/mmcblk0/device/uevent:DRIVER=mmcblk
/sys/block/mmcblk0/device/uevent:MMC_TYPE=MMC
/sys/block/mmcblk0/device/uevent:MMC_NAME=MMC02G
/sys/block/mmcblk0/device/uevent:MODALIAS=mmc:block
/sys/block/sda/device/uevent:DEVTYPE=scsi_device
/sys/block/sda/device/uevent:DRIVER=sd
/sys/block/sda/device/uevent:MODALIAS=scsi:t-0x00
/sys/block/sdb/device/uevent:DEVTYPE=scsi_device
/sys/block/sdb/device/uevent:DRIVER=sd
/sys/block/sdb/device/uevent:MODALIAS=scsi:t-0x00
/sys/block/sdc/device/uevent:DEVTYPE=scsi_device
/sys/block/sdc/device/uevent:DRIVER=sd
/sys/block/sdc/device/uevent:MODALIAS=scsi:t-0x00
/sys/block/sr0/device/uevent:DEVTYPE=scsi_device
/sys/block/sr0/device/uevent:DRIVER=sr
/sys/block/sr0/device/uevent:MODALIAS=scsi:t-0x05

Или:
Устройство
$ grep . /sys/block/*/device/{model,name}
/sys/block/sda/device/model:WDC WD5000LPCX-2  # sata винчестер
/sys/block/sdb/device/model:TransMemory       # usb флеш
/sys/block/sdc/device/model:Transcend         # usb-hdd
/sys/block/sr0/device/model:DVD-RW DA8A6SH    # dvd-rw
/sys/block/mmcblk0/device/name:MMC02G         # mmc карта

Тип устройства
$ grep . /sys/block/*/device/uevent|grep 'TYPE'
/sys/block/mmcblk0/device/uevent:MMC_TYPE=MMC
/sys/block/sda/device/uevent:DEVTYPE=scsi_device
/sys/block/sdb/device/uevent:DEVTYPE=scsi_device
/sys/block/sdc/device/uevent:DEVTYPE=scsi_device
/sys/block/sr0/device/uevent:DEVTYPE=scsi_device

Отсюда видно, что MMC карта, это не scsi блочное устройство.


Какие модули при этом используются (см. выше DRIVER=  параметром для grep):
$ lsmod | grep 'sd\|sr\|mmcblk'
msr                     2408  0
rtsx_usb_sdmmc         12050  0
mmc_core              101693  2 mmc_block,rtsx_usb_sdmmc
rtsx_usb                9502  2 rtsx_usb_sdmmc,rtsx_usb_ms
sr_mod                 13717  0
cdrom                  25662  1 sr_mod
sd_mod                 33295  4
scsi_mod              194640  6 sg,uas,usb_storage,libata,sd_mod,sr_mod
« Последнее редактирование: 04.11.2017 14:30:30 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Как получить список имён пакетов из файла-списка прилагающегося к установочному образу на сервере

Предположим у нас есть файл
http://ftp.altlinux.org/pub/distributions/ALTLinux/p8/images/workstation/alt-workstation-20161122-x86_64.iso.txt

в котором есть список rpm файлов
$ grep RPMS.main/ alt-workstation-20161122-x86_64.iso.txt | head -n 3
/ALTLinux/RPMS.main/1c-preinstall-8.3-alt10.noarch.rpm
/ALTLinux/RPMS.main/acl-2.2.52.0.50.ea3c-alt1.x86_64.rpm
/ALTLinux/RPMS.main/acpid-2.0.22-alt1.x86_64.rpm
из которого нужно выделить имена пакетов пригодные для установки через apt-get.


Сначала получаем только список rpm файлов
$ grep RPMS.main/ alt-workstation-20161122-x86_64.iso.txt > 1.txt

в виде
$ head -n3 1.txt
/ALTLinux/RPMS.main/1c-preinstall-8.3-alt10.noarch.rpm
/ALTLinux/RPMS.main/acl-2.2.52.0.50.ea3c-alt1.x86_64.rpm
/ALTLinux/RPMS.main/acpid-2.0.22-alt1.x86_64.rpm

Затем через sed вырезаем абсолютный путь
$ sed 's/\/ALTLinux\/RPMS\.main\///g' 1.txt > 2.txt

чтобы получить только имена rpm файлов
$ head -n3 2.txt
1c-preinstall-8.3-alt10.noarch.rpm
acl-2.2.52.0.50.ea3c-alt1.x86_64.rpm
acpid-2.0.22-alt1.x86_64.rpm

Здесь начинается самое интересное.
Обратите внимание на имя пакета. Оно в формате:
имя-версия-релиз-платформа.rpm
Причём поля разделены минусом. Но фиксированным значение/наименование полей будет только если считать поля с конца каждой строки, потому что само имя пакета может быть сложным и может включать в себя несколько разделителей минус. Поэтому за начало отсчёта мы можем принять только отсчёт с конца строки.

Но на этот случай существует команда реверс.
Поэтому завершающая команда получения имён пакетов работает так:
- Выводим список
- Реверсом переворачиваем все строки
- Выводим с третьего поля и до конца каждую строку
- Реверсируем список возвращая в исходный вид
$ cat 2.txt | rev | cut -f3- -d- | rev > 3.txt

чтобы в финале получить список пакетов пригодный для установки, - например в только что установленный минималистичный стартеркит:
$ head -n3 3.txt
1c-preinstall
acl
acpid

Т.о. обработав текстовый файл со списком пакетов, лежащий на сервере и прилагающийся к iso-образу, вы можете получить список имён пакетов пригодный для использования с пакетным менеджером.

Например установить все пакеты из списка в уже подготовленном файле
# apt-get install $(<3.txt)

Удобство такого метода в том, что вы не привязаны к какому-то одному базовому установочному образу. Он может быть любым самым минималистичным.
Если вы хотите чтобы ваша установленная система полностью соответствовала какому-то другому образу, главное чтобы к этому образу прилагался текстовый файл с содержимым этого установочного образа.

Если вам пакеты kernel-* и grub* не нужны, вы можете исключить их из списка
$ grep -v '^kernel\|^grub' 3.txt

Если ваш базовый установочный образ стартеркит, просто не устанавливайте пакет с лицензией из списка и ваша система останется той же GNU GPL.


Готовый пример файла-списка:
Преобразованный список rpm-файлов в список с именами пакетов, во вложении.
« Последнее редактирование: 07.11.2017 04:43:48 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Где найти логи apt-get


В системе на systemd:

Исходный формат строк в журнале:
# journalctl|grep apt-get|head -5
ноя 12 18:51:30 localhost.localdomain apt-get[2295]: udev-rules-1:230-alt1.M80P.7 1510158232 installed
ноя 12 18:51:35 localhost.localdomain apt-get[2295]: udev-rules-1:230-alt1.M80P.1 1475233176 removed
ноя 12 18:51:35 localhost.localdomain apt-get[2295]: libgtk-engines-default-common-1:2.20.2-alt2.qa2.M80P.1 1498474461 installed
ноя 12 18:51:41 localhost.localdomain apt-get[2295]: libgtk-engines-default-common-1:2.20.2-alt2.qa2 1385610239 removed
ноя 12 18:51:55 localhost.localdomain apt-get[2295]: alterator-l10n-2.9.38-alt1 1508332803 installed

Команда сохранения логгирования apt-get в файл
(Команда может быть исполняемым скриптом)
# journalctl|grep 'apt-get\['|awk '{$4=""; print $0}' > $(date +%Y%m%d-%H%M)-journal-apt-get.txt

Разбор команды:

Собсно сам весь журнал
journalctl

Выводить только строки указанной модели.
Бэкслэш указывает интерпретатору команд, что следующий за ним символ не нужно интерпретировать, а воспринимать его как ASCII символ.
grep 'apt-get\['

Очистить содержимое 4-го поля и все поля вывести на стандартный вывод.
(команда скрывает 4-е поле hostname)
awk '{$4=""; print $0}'

Перенаправление вывода
>

Вывод сохранить в файл с именем в формате:
ГодМесяцДень-ЧасыМинуты-journal-apt-get.txt
Дата и время будут использоваться текущие.
$(date +%Y%m%d-%H%M)-journal-apt-get.txt
« Последнее редактирование: 13.11.2017 21:22:26 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
По мотивам поднятой темы:
В alt8 не пишет с микрофона audacity


Звуковая карта и HDMI
Сделать звуковую карту, картой 0
Смена приоритета аудиокарт (переиндексация)

Признаки:
- отсутствие звука и микрофона в системе с alsa
- отсутствие микрофона в Audacity в системе с pulseaudio

Причина:
- При двух звуковых устройствах в системе, основная звуковая карта не является картой 0, т.е. картой по-умолчанию.
- В Audacity используется движок alsa или движок oss при наличии установленного пакета ossp с запущенным сервисом osspd. Но не движок pulse. И Audacity работает с картой по-умолчанию, с картой 0.
osspd и alsa-plugins-pulse неявно конфликтуют: при установленном пакете alsa-plugins-pulse, звук в приложениях, которые требуют /dev/dsp через osspd, исчезнет. Для восстановления работы osspd потребуется удаление пакета alsa-plugins-pulse и рестарт сервиса osspd.

Исходные данные, по-умолчанию неверная индексация звуковых карт
$ cat /proc/asound/cards
 0 [HDMI           ]: HDA-Intel - HDA ATI HDMI
                      HDA ATI HDMI at 0xf0344000 irq 36
 1 [Generic        ]: HDA-Intel - HD-Audio Generic
                      HD-Audio Generic at 0xf0340000 irq 16
$ cat /proc/asound/modules
 0 snd_hda_intel
 1 snd_hda_intel
$ grep . /proc/asound/card*/id
/proc/asound/card0/id:HDMI
/proc/asound/card1/id:Generic


Способ устранения:
Здесь звуковая карта с идентификатором Generic, это карта 1, а HDMI, это устройство по-умолчанию, - карта 0.
Их требуется поменять местами так, чтобы карта с идентификатором Generic стала картой 0, т.е. картой по-умолчанию.


Порядок действий:

Открываете терминал. Как правило в меню он называется Эмулятор терминала.
Получаете права root:
$ su --login root

Далее команды выполняются от пользователя root. О чём будет говорить символ # стоящий в начале каждой команды (использовать его в командах не нужно).

Вызываете на редактирование файл
# mcedit  /etc/modprobe.d/alsa-modindex.conf

В файле
/etc/modprobe.d/alsa-modindex.conf

будет незакомментированная строка, - закомментируйте её, приведя к такому виду:
# options snd_pcsp index=10

Ниже в этом же файле введите две строки, - файл должен заканчиваться пустой строкой, это обязательно:
options snd_hda_intel id=Generic index=0
options snd_hda_intel id=HDMI index=2

Эти две строки меняют индексы карт:
Карта Generic станет картой 0
Карта HDMI станет картой 2

Сохраните и перегрузитесь.
После перезагрузки, звуковая карта Generic станет картой 0, а карта HDMI, - картой 2.
Это вы можете проверить командой
$ cat /proc/asound/cards

Вариант переиндексации звуковых карт для которых используется один и тот же ядерный модуль:
В файл
/etc/modprobe.d/alsa-modindex.conf

вписать единственную незакомментированную строку
options snd-hda-intel index=1,0


Далее то,  что необходимо для настройки Audacity

Проверьте командой в системе с pulseaudio
rpm -q alsa-plugins-pulse

Если пакет не установлен, установите его
# apt-get update
# apt-get install alsa-plugins-pulse

После установки этого пакета, в Audacity у вас появится устройство
pulse: Mic:0

Запустите микшер от пользователя из терминала командой pavucontrol.
Иногда в регуляторе звука pulseaudio он называется опцией Звуковой микшер.
На вкладке Устройства ввода, кнопкой с динамиком, проверьте, чтобы захват звука был включен, а полоса (ниже) Тишина-База-100% была не затенена и активна.

Запустите Audacity.
Нижняя панель - настройки слева направо:
Звуковой движок - ALSA
Recording device - pulse: Mic:0
Recording Channels - 1 (Mono) Recording Channel
Playback Device - pulse

Recording device указан как устройство pulse: Mic:0
Вы можете выбрать в нижней панели то устройство ввода, с которого идёт захват звука. Их может быть несколько. Поиграйтесь с выбором из их списка, для получения захвата звука.

После нажатия в Audacity на красную круглую кнопку Append Record, начнётся захват звука, но себя вы не услышите.

Если нужно слышать себя:
Запустите от пользователя в терминале команду
$ alsamixer -c 0 -V all
-c 0 -- карта 0, карта по-умолчанию
-V all -- показать все настройки, и Playback, и Capture

Курсорными клавишами Влево-Вправо, подведите курсор к регулятору Mic и клавишей m включите микрофон.
Курсорными клавишами Вверх-Вниз, регулируется уровень.
Для начала не поднимайте его очень высоко:
- Если пользуетесь спикерами ноутбука и микрофоном гарнитуры, может возникнуть обратная связь, - понизьте уровень микрофона.

Настройки Audacity, на скриншоте как готовый пример.


Маленький эпилог.
Зачем HDMI делать картой 2, а не 1?
Существует хак, который позволяет подключать usb-гарнитуру на горячую, делая эту гарнитуру, картой по-умолчанию. Если микрофон не нужен, то после подключения гарнитуры, никакие дополнительные действия не требуется. Это настоящий полный хотплаг. На этот случай мы и сделали свободным сокет 1.

Дополнительная информация:
Как сделать внешнюю usb-аудиокарту дефолтной в системе с alsa
« Последнее редактирование: 27.11.2017 03:07:12 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Блокировка установки нового пакета в системе с apt
который устанавливается по зависимостям при dist-upgrade
На примере блокировки установки нового пакета systemd в системе с sysvinit

Этой операции предшествовал поиск пакета вручную, у которого пакет systemd в зависимостях, из списка пакетов предложенных dist-upgrade. Даже не надейтесь что вы этот пакет найдёте сразу.

Смотрим сюда
# apt-get install syslog-ng
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие дополнительные пакеты будут установлены:
  ca-certificates-java checkpolicy java-1.8.0-openjdk-headless java-common javapackages-tools libauparse0
  libhugetlbfs libhugetlbfs-utils liblksctp libselinux-utils libsetools lksctp-tools netlabel_tools
  policycoreutils policycoreutils-mcstransd policycoreutils-newrole policycoreutils-restorecond
  python-module-IPy python-module-audit python-module-pkginfo python-module-selinux
  python-module-semanage python-module-sepolgen python-module-slip selinux-policy-alt setools-console
  sqlite3 systemd tzdata-java
Следующие пакеты будут ОБНОВЛЕНЫ:
  syslog-ng
Следующие пакеты будут ЗАМЕНЕНЫ:
  libeventlog (by syslog-ng)
Следующие НОВЫЕ пакеты будут установлены:
  ca-certificates-java checkpolicy java-1.8.0-openjdk-headless java-common javapackages-tools libauparse0
  libhugetlbfs libhugetlbfs-utils liblksctp libselinux-utils libsetools lksctp-tools netlabel_tools
  policycoreutils policycoreutils-mcstransd policycoreutils-newrole policycoreutils-restorecond
  python-module-IPy python-module-audit python-module-pkginfo python-module-selinux
  python-module-semanage python-module-sepolgen python-module-slip selinux-policy-alt setools-console
  sqlite3 systemd tzdata-java
1 будет обновлено, 29 новых установлено, 1 пакетов будет заменено, 0 пакетов будет удалено и 23 не будет обновлено.
Необходимо получить 34,2MB архивов.
После распаковки потребуется дополнительно 123MB дискового пространства.
Продолжить? [Y/n] n
Прервано.

и видим там пакеты
# apt-get install syslog-ng
...
Следующие дополнительные пакеты будут установлены:
... systemd ...
Следующие пакеты будут ОБНОВЛЕНЫ:
  syslog-ng
Следующие пакеты будут ЗАМЕНЕНЫ:
  libeventlog (by syslog-ng)
Следующие НОВЫЕ пакеты будут установлены:
... systemd ...
1 будет обновлено, 29 новых установлено, 1 пакетов будет заменено, 0 пакетов будет удалено и 23 не будет обновлено.
Необходимо получить 34,2MB архивов.
После распаковки потребуется дополнительно 123MB дискового пространства.
Продолжить? [Y/n] n
Прервано.

Далее внимательно, это важно!
Новая версия syslog-ng
# apt-cache show syslog-ng | grep '^Pack\|^Vers'
Package: syslog-ng
Version: 3.13.1-alt1
Package: syslog-ng
Version: 3.8.1-alt2

требует по зависимостям пакет systemd, установку которого допустить в систему нельзя
# apt-cache depends syslog-ng | grep 'syslog-ng\|systemd'
syslog-ng-3.13.1-alt1
  Depends: <libsystemd.so.0>
    libsystemd-1:235-alt3
  Depends: <libsystemd.so.0(LIBSYSTEMD_209)>
    libsystemd-1:235-alt3
  Depends: systemd

Выше упоминается и пакет libeventlog

Поскольку при попытке dist-upgrade упоминаются пакеты
# apt-get install syslog-ng
...
Следующие пакеты будут ОБНОВЛЕНЫ:
  syslog-ng
Следующие пакеты будут ЗАМЕНЕНЫ:
  libeventlog (by syslog-ng)
...
Прервано.

ставим их оба в Hold, иначе будут разламываться зависимости
# cat /etc/apt/apt.conf.d/90-apt-hold.conf
RPM::Hold { syslog-ng; };
RPM::Hold { libeventlog; };

Но новый пакет systemd всё равно пролезет в систему, поскольку by version блокирует установку только более новых версий установленного пакета.

Поэтому блокировку установки нового пакета systemd пишем так
# cat /etc/apt/preferences.d/systemd
Package: systemd
Pin: version 3.8.1*
Pin-Priority: -1

Разбор по строкам:

Package: systemd
Имя нового пакета, установка которого должна быть заблокирована.
Этот пакет в зависимостях у пакета syslog-ng-3.13.1-alt1

Pin: version 3.8.1*
Здесь указана версия текущего установленного в системе пакета syslog-ng-3.8.1-alt2 у которого пакета systemd в зависимостях ещё нет.

Pin-Priority: -1
Запретить повышение версии.
Речь идёт о syslog-ng. Поскольку apt/preferences, это контроль версий.

В данном случае, запрещается установка пакета systemd зависящего от пакета версии выше 3.8.1 (текущий установленный syslog-ng).

Результатом этой магии, будет отсутствие предложения обновления пакетов syslog-ng, libeventlog и systemd при выполнении dist-upgrade
# apt-get dist-upgrade
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Подсчет обновлений... Завершено
Следующие пакеты будут ОБНОВЛЕНЫ:
  grub-common grub-pc python-module-custodia python-module-gssapi python-module-setuptools
Следующие НОВЫЕ пакеты будут установлены:
  ca-certificates-java checkpolicy java-1.8.0-openjdk-headless java-common javapackages-tools libauparse0
  libhugetlbfs libhugetlbfs-utils liblksctp libselinux-utils libsetools lksctp-tools netlabel_tools
  policycoreutils policycoreutils-mcstransd policycoreutils-newrole policycoreutils-restorecond
  python-module-IPy python-module-audit python-module-configparser python-module-pkginfo
  python-module-selinux python-module-semanage python-module-sepolgen python-module-slip
  python-module-systemd selinux-policy-alt setools-console sqlite3 tzdata-java
Следующие пакеты будут СОХРАНЕНЫ:
  syslog-ng
5 будет обновлено, 30 новых установлено, 0 пакетов будет удалено и 1 не будет обновлено.
Необходимо получить 37,9MB архивов.
После распаковки потребуется дополнительно 119MB дискового пространства.
Продолжить? [Y/n]

Для такой блокировки потребуется контроль дерева по зависимостям и версиям.

Недостаток этого метода:
- При dist-upgrade для инсталляции будет предлагаться много пакетов и потребуется найти пакет, у которого нежелательный для установки пакет в зависимостях. Этот пакет придётся искать вручную, перебирая пакеты несколько часов или писать скрипт выполняющий поиск с перебором нескольких десятков пакетов. В последнем случае понадобится быстрая память, мощный процессор и быстрый винчестер, - SSD здесь будет много предпочтительнее. Иначе при запрос/перебор операция затянется надолго.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Сравнение дробных чисел

$ NUM=1.2500; \
if [[ $NUM > 1.3333 ]]; \
then \
echo "Переменная больше 1.3333"; \
else \
echo "Переменная меньше 1.3333"; \
fi
Переменная меньше 1.3333
$ NUM=1.7786; \
if [[ $NUM > 1.3333 ]]; \
then \
echo "Переменная больше 1.3333"; \
else \
echo "Переменная меньше 1.3333"; \
fi
Переменная больше 1.3333

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Как получить параметры виртуального терминала

$ stty -a | head -n1 | sed 's/;/\n/g' | sed 's/^ //g' | grep 'col\|row'
rows 48
columns 128
$ fbset --test

mode "1024x768"
    geometry 1024 768 1024 768 32
    timings 0 0 0 0 0 0 0
    accel true
    rgba 8/16,8/8,8/0,0/0
endmode

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
хэлпы в скриптах

Только пользователи при системной локали ru_RU.UTF-8 будут читать help на русском языке, во всех остальных вариантах, help будет на английском:
#!/bin/sh

if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then

    SYSLANG=`grep "^LANG=" /etc/sysconfig/i18n | cut -f2 -d '='`

    if [ $UID != 0 ] && [ "$SYSLANG" = "ru_RU.UTF-8" ]; then

            echo
            echo "Использование: `basename $0` [опции]"
            echo
            echo "Опции:"
            echo " -h, --help   этот help"
            echo

        else

            echo
            echo "Usage: `basename $0` [options]"
            echo
            echo "Options:"
            echo " -h, --help   this help"
            echo
 
    fi

exit 0
fi

commands
commands
commands

Например:
$ script.sh -h

Использование: script.sh [опции]

Опции:
 -h, --help   этот help

# script.sh -h

Usage: script.sh [options]

Options:
 -h, --help   this help


Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Фиксация в системе дефолтного nvidia_glx_173.*.* драйвера
Если в системе поднимается нежелательный видеодрайвер версии выше чем 173
(с небольшими изменениями применимо и для других ситуаций)

# touch /usr/local/bin/n173def
Буква 'n' - nvidia, 173 - версия драйвера, def - by default, по-умолчанию:
# chmod u+rwx /usr/local/bin/n173def

Добавляем в файл следующее содержимое:
#!/bin/bash
#
# Select nvidia_glx_173.14.37 driver as default
# Deleting not nvidia-173*.xinf of symlinks
#

find /usr/share/hwdatabase/videoaliases/ -type l \( -not -name nvidia-173*.xinf \)|xargs rm -f
Не забываем про перевод строки!
Маску можно вставить любую, зависимо от того, какой драйвер надо по-дефолту и чтобы в любом случае именно он был.
Имя скрипта сменить при смене маски по имени фиксируемого драйвера.
И комментарий тоже ;)

А дальше:
# apt-get update && apt-get dist-upgrade && update-kernel && n173def

И можно всю эту строку алиасом big-upgrade.
Ну где-то так:
# alias big-upgrade='apt-get update -y && apt-get dist-upgrade -y && update-kernel -f && n173def'

Тогда обновление пакетной базы, обновление системы, обновление ядра и возврат на 173-й драйвер как дефолтный, будет выполняться автоматически без запросов на подтверждение.
Если регулярное обновление ядра, которое стоит в hold, вам не нужно, уберите '&& update-kernel -f ' из команды.
Команда, вместо длинной строки, будет выглядеть так:
# big-upgrade

Что последнее и делает:
# n173def
# ls -1 /usr/share/hwdatabase/videoaliases/
cirrus-kms.xinf
nvidia-173.14.37.xinf
И 173-й драйвер неожиданно не превратится в свежака.

Можно руками каждый раз xinf'ы килить когда влетает, но как лениво...
Можно было бы первой строкой архив симлинков создавать, а оно надо?
Или скрипт делать размером серьёзно побольше и писать на баше driver-selecter.
А можно его попробовать переделать и повесить как сервис (см. в этой же теме описание сервиса smb_umnt), чтобы отрабатывал на старте системы до взлёта Х-ов,.

Чтобы вернуть как было, надо или симлинки снова создать (по аналогии с оставшимся), или драйверам делать '--reinstall'.
После autoclean  тянуть будет не по трафику, а из кеша.
« Последнее редактирование: 09.02.2018 15:27:53 от Speccyfighter »