AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1516653
Accepted
Ap0st0l
Ap0st0l
Asked: 2024-06-05 22:13:59 +0800 CST2024-06-05 22:13:59 +0800 CST 2024-06-05 22:13:59 +0800 CST

O script Bash não funciona quando usado com atalho de teclado, mas funciona no console

  • 772

Com a ajuda da IA ​​fiz um script, que alterna entre os dois dispositivos de áudio escolhidos por mim.

Como o nome do dispositivo muda a cada reinicialização do sistema, o script localiza os dispositivos por suas propriedades em pactl: device.product.name(por exemplo Sound BlasterX G6) e, em seguida, encontra o nome correspondente (por exemplo alsa_output.usb-Creative_Technology_Ltd_Sound_BlasterX_G6_F3004F4766X-00.analog-stereo).

O script funciona bem quando usado no console com /home/yan/Skrypty/sink-switch2.sh. A saída do log fica assim:

Start
SPEAKERS_NAME:alsa_output.pci-0000_08_00.4.analog-stereo
SOUNDBLASTER_NAME:alsa_output.usb-Creative_Technology_Ltd_Sound_BlasterX_G6_F3004F4766X-00.analog-stereo
DEFAULT:alsa_output.pci-0000_08_00.4.analog-stereo
Change to:alsa_output.usb-Creative_Technology_Ltd_Sound_BlasterX_G6_F3004F4766X-00.analog-stereo
End

No entanto, quando defino o atalho de teclado nas configurações do GNOME: insira a descrição da imagem aqui

Não funciona e o log fica assim:

Start
SPEAKERS_NAME:
SOUNDBLASTER_NAME:
DEFAULT:alsa_output.pci-0000_08_00.4.analog-stereo
Change to:
End

Por que não funciona como atalho?

O roteiro:

#!/bin/bash

# Starship/Matisse HD Audio Controller
# Sound BlasterX G6

echo "Start" >> /home/yan/Skrypty/log.txt

DEFAULT=$(pactl get-default-sink)

# device.product.name
SPEAKERS="Starship/Matisse HD Audio Controller"
SOUNDBLASTER="Sound BlasterX G6"

# getting real name
SPEAKERS_NAME=$(pactl list sinks | grep -B 1 "Description:.*$SPEAKERS" | grep "Name:" | sed 's/Name: //' | tr -d '[:space:]')
SOUNDBLASTER_NAME=$(pactl list sinks | grep -B 1 "Description:.*$SOUNDBLASTER" | grep "Name:" | sed 's/Name: //' | tr -d '[:space:]')

echo "SPEAKERS_NAME:$SPEAKERS_NAME" >> /home/yan/Skrypty/log.txt
echo "SOUNDBLASTER_NAME:$SOUNDBLASTER_NAME" >> /home/yan/Skrypty/log.txt
echo "DEFAULT:$DEFAULT" >> /home/yan/Skrypty/log.txt

if [[ "$DEFAULT" == "$SPEAKERS_NAME" ]]
then
    # change to Soundblaster
    notify-send -e --expire-time=1000 "Zmiana dźwięku na: $SOUNDBLASTER"
    echo "Change to:$SOUNDBLASTER_NAME" >> /home/yan/Skrypty/log.txt
    pactl set-default-sink "$SOUNDBLASTER_NAME"
else
    # change to speakers
    notify-send -e --expire-time=1000 "Zmiana dźwięku na: $SPEAKERS"
    echo "Change to:$SPEAKERS_NAME" >> /home/yan/Skrypty/log.txt
    pactl set-default-sink "$SPEAKERS_NAME"
fi

echo "End" >> /home/yan/Skrypty/log.txt

Diferença entre ambientes:

yan@yan-ubuntu:~/Skrypty$ colordiff <(env | sort) <(sort /home/yan/Skrypty/log.txt)
1d0
< COLORTERM=truecolor
6a6
> GIO_LAUNCHED_DESKTOP_FILE_PID=15262
7a8
> GNOME_KEYRING_CONTROL=/run/user/1000/keyring
9,10d9
< GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/9d389c3d_3de5_4539_8fef_7d793c1c8b9c
< GNOME_TERMINAL_SERVICE=:1.191
17,19c16,18
< LANG=en_GB.UTF-8
< LESSCLOSE=/usr/bin/lesspipe %s %s
< LESSOPEN=| /usr/bin/lesspipe %s
---
> INVOCATION_ID=a27624429852440d9182ed33440a8c6a
> JOURNAL_STREAM=8:26020
> LANG=pl_PL.UTF-8
21,23c20,21
< LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:
< MANGOHUD=1
< MEMORY_PRESSURE_WATCH=/sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/session.slice/[email protected]/memory.pressure
---
> MANAGERPID=2239
> MEMORY_PRESSURE_WATCH=/sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/session.slice/org.gnome.SettingsDaemon.MediaKeys.service/memory.pressure
25,31c23,24
< NVM_BIN=/home/yan/.nvm/versions/node/v20.14.0/bin
< NVM_CD_FLAGS=
< NVM_DIR=/home/yan/.nvm
< NVM_INC=/home/yan/.nvm/versions/node/v20.14.0/include/node
< OLDPWD=/home/yan
< PATH=/home/yan/.nvm/versions/node/v20.14.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
< PWD=/home/yan/Skrypty
---
> PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
> PWD=/home/yan
38,39c31
< SYSTEMD_EXEC_PID=3047
< TERM=xterm-256color
---
> SYSTEMD_EXEC_PID=3241
43d34
< VTE_VERSION=7600
bash
  • 1 1 respostas
  • 49 Views

1 respostas

  • Voted
  1. Best Answer
    kos
    2024-06-05T23:46:54+08:002024-06-05T23:46:54+08:00

    Conforme determinado na seção de comentários comparando os ambientes em que o script é executado usando env, verifica-se que LANGfoi definido pl_PL.UTF-8como um atalho quando o script estava sendo executado, o que interrompeu a análise dos pactlcomandos (localizados);

    Definir LC_ALLcomo en_GB.UTF-8, o mesmo local em que o script estava funcionando ao ser executado no terminal corrigiu o problema:

    export LC_ALL=en_GB.UTF-8
    

    Observe que a configuração LC_ALLé uma solução abrangente que substitui todas as configurações de localidade (ou seja, LANGtodas as LCvariáveis), mas neste caso muito específico, uma vez que nenhuma outra LCvariável foi definida de forma diferente nos dois ambientes (ou a comparação dos ambientes teria mostrado o diferença) e, portanto, nenhuma outra LCvariável estava afetando ativamente a saída de pactl, a configuração LANGteria funcionado da mesma forma e, neste caso, teria sido a maneira "certa" de corrigir o problema:

    export LANG=en_GB.UTF-8
    
    • 3

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve