Bagaimana cara beralih antara headphone dan speaker tanpa mencabut headphone

23

Ketika saya mencolokkan headphone saya, perangkat output audio beralih ke headphone dari speaker saya.

Daripada mencolokkan / melepas kabel headphone setiap saat, yang pada akhirnya akan aus kabel / jack saya, saya hanya ingin menggunakan saklar perangkat lunak.

Ketika saya membuka Pengaturan Suara dan beralih dari "Headphone -> Audio Bawaan" ke "Line Out -> Audio Bawaan" tidak ada suara yang keluar dari speaker atau headphone saya.

Saya membuka alsamixer untuk melihat apa yang terjadi ketika saya pasang / cabut headphone.

Headphone di: Headphone masuk

Headphone habis: Headphone habis

Dengan headphone terpasang saya secara manual mengubah semua pengaturan untuk mencocokkan pengaturan ketika headphone keluar dan masih tidak mendapatkan suara melalui speaker.

Sebagai catatan tambahan, mengubah perangkat output audio melalui "Pengaturan Suara" menyebabkan perubahan yang sama juga menjadi alsamixer.

pengguna276318
sumber
1
Sejauh yang saya tahu, itu adalah sakelar perangkat keras di dalam jack Headphone yang tidak memungkinkan untuk beralih. Setelah sakelar diaktifkan, speaker dinonaktifkan. Pernahkah Anda berpikir mungkin menggunakan headphone Bluetooth?
Terrance
Terima kasih @Terrance, saya merasa mungkin sesuatu seperti itu, saya bahkan memeriksa BIOS untuk melihat apakah ada sesuatu di sana. Saya hanya sedikit terkejut bahwa mereka akan memiliki solusi perangkat keras untuk apa yang seharusnya menjadi masalah perangkat lunak.
user276318
1
Ingatlah bahwa kartu suara mungkin tidak dapat menghasilkan beberapa perangkat - beberapa kartu suara memiliki kode yang keras pada tingkat perangkat keras untuk mematikan output speaker ketika koneksi headphone dibuat, dan itu tidak dapat diganti ...
Thomas Ward
@Terrance Saya memulai hadiah, mungkin Anda ingin menggali lebih dalam dan menulis jawaban?
hidangan penutup
@dantikan lihat jawaban GoodGuyNick di bawah ini - ini mungkin tidak bekerja pada semua perangkat keras, dan dalam pengalaman saya itu tidak memisahkan output (yang akan memungkinkan Anda untuk mengirim audio programA ke speaker dan programB ke headphone pada saat yang sama), tetapi jika cukup menonaktifkan sakelar otomatis diperlukan, itulah hal pertama yang harus dicoba.
quixotic

Jawaban:

9

Memiliki kedua speaker dan headphone terpasang dan beralih di perangkat lunak on-the-fly

Secara desain, Pulseaudio secara otomatis mematikan Line Out ketika headphone dicolokkan dan menggunakan slider Headphone sebagai gantinya. Anda dapat mengamati perilaku ini di alsamixer. Yang kami inginkan adalah agar slider Headphone dan Line Out berfungsi secara terpisah dan pada saat yang sama. Ini sangat berguna jika Anda ingin memetakan kembali jack Realtek untuk memiliki, katakanlah, Rear Green untuk headphone dan Blue untuk speaker (dengan bantuan hdajackretask dari alsa-tools).

Untuk mencapai ini, Anda harus langsung mengedit konfigurasi mixer Pulseaudio.

1. Kami memberi tahu pulseaudio bahwa headphone selalu terhubung.

Edit:

/usr/share/pulseaudio/alsa-mixer/paths/analog-output-lineout.conf

Menemukan:

[Jack Headphone]
state.plugged = no
state.unplugged = unknown

Ubah noke yes.

Jika Anda menggunakan jack di bagian depan kasing komputer Anda, [Jack Front Headphone]ganti.

2. Secara default, volume Line Out hanya dikontrol oleh Master, dan bukan oleh slider Line Out itu sendiri.

Kami ingin menggabungkan Line Out dengan Master. Tambahkan potongan ini ke akhir file:

[Element Line Out]
switch = mute
volume = merge

3. Kita harus memotong Line Out sepenuhnya ketika kita menggunakan headphone.

Edit:

/usr/share/pulseaudio/alsa-mixer/paths/analog-output-headphones.conf

Tambahkan potongan ini ke akhir file:

[Element Line Out]
switch = off
volume = off

Pada beberapa sistem Anda mungkin juga perlu menonaktifkan Front dengan menambahkan potongan ini:

[Element Front]
switch = off
volume = off

4. Seperti Pulseaudio, Alsa sendiri memotong speaker ketika headphone tersambung.

Buka alsamixer: alsamixer -c0ataualsamixer -c1

Gunakan / ke mode Auto-Mute. Nonaktifkan Mode Bisu Otomatis dengan . Tutup juga dengan Esc.

Simpan perubahan Anda dengan: alsactl store

5. Mulai ulang Pulseaudio

$ pulseaudio -k
$ pulseaudio --start

Sekarang Anda memiliki dua port terpisah di wastafel yang sama di pulseaudio. Mereka saling membisukan, sehingga Anda dapat beralih ke headphone dan ini akan membisukan Line Out, dan sebaliknya. Untuk berpindah antar port, Anda dapat menggunakan mixer suara Gnome atau Plasma, atau menginstal ekstensi desktop yang sesuai.


Sumber

WinEunuuchs2Unix
sumber
2
Anda tidak boleh mengedit file secara langsung di /usr/share. Jika pulseaudio menerima pembaruan (misalnya untuk memperbaiki bug), perubahan Anda akan terhapus. Biasanya ada mekanisme untuk menyediakan file override /etcatau sejenisnya, tapi saya tidak tahu tentang pulseaudio secara khusus.
Robie Basak
@RobieBasak Sumber informasi ini adalah situs web Arch Linux. Sayangnya saya bukan pengguna Arch Linux jadi saya tidak dapat memposting ulang komentar Anda di situs mereka. Semoga salah satu pengguna Arch Linux yang berkeliaran di sini membaca komentar Anda dan memposting ulang di sana.
WinEunuuchs2Unix
1
@RobieBasak, well, orang bisa menulis skrip pembungkus yang melakukan ini dan memohonnya setelah login
Robert Riedl
1
Sayangnya itu tidak berhasil untuk saya, tetapi terima kasih atas jawaban Anda!
hidangan penutup
1
@D kesenangan saya. Sangat menarik meneliti area ini. Saya harap kamu menemukan apa yang kamu cari.
WinEunuuchs2Unix
9

Untuk memungkinkan untuk beralih di antara speaker dan headphone, ikuti langkah-langkah ini:

  1. Lari alsamixer.
  2. Jika perlu, pilih kartu suara Anda dengan F6.
  3. Arahkan ke "Auto-Mute" dengan panah kanan .
  4. Nonaktifkan dengan panah bawah .
  5. Tekan Escuntuk keluar.

Atau Anda dapat melakukan semua langkah ini dengan satu perintah:

  1. Terminal terbuka
  2. menjalankan amixer -c 1 set 'Auto-Mute Mode' Disabled

Sekarang Anda dapat mengubah antara speaker dan headphone di PulseAudio Volume Control.

Setelah menerapkan instruksi ini, Anda dapat membuat hidup Anda lebih mudah dengan menggunakan Sound Switcher Indicator untuk beralih dengan cepat antara headphone dan speaker.

GoodGuyNick
sumber
2
Saya tidak berpikir bahwa ini akan bekerja untuk semua kombinasi perangkat keras - beberapa sistem (seperti milik saya) tampaknya menggunakan saklar perangkat keras dari beberapa variasi, yang tidak diketahui. Misalnya, jika Anda mencolokkan headphone ke ampli gitar, speaker di amp itu biasanya akan dimatikan - dan tidak ada komputer di perangkat itu ....
Charles Green
Ini bekerja untuk saya di Realtek ALC887-VD
Paul Praet
Terima kasih. Itu berhasil untuk saya. Apakah ada cara untuk mencapainya melalui skrip bash?
ka3ak
1
@ ka3ak Saya telah memperbarui jawaban untuk Anda
GoodGuyNick
4

hdajackretask adalah alat untuk menetapkan kembali fungsi jack Anda untuk input, output atau nonaktif yang berbeda - misalnya, ubah jack Mic Anda menjadi Headphone tambahan, atau mengapa tidak membuat keduanya line out dan menghubungkannya ke penerima surround Anda?

Instal alsa-tools-gui

sudo apt-get update
sudo apt-get install alsa-tools-gui

Jalankan hdajackretaskKemudian Untuk mengganti salah satu jack Anda:

  1. Pilih satu codec
  2. Klik kotak centang "Override" untuk pin itu dan pilih fungsi yang diinginkan baru
  3. Klik "Terapkan sekarang"

    Catatan: Jika jack headphone memiliki sakelar perangkat keras bawaan yang merutekan audio maka Anda SOL (Maaf keluar dari keberuntungan). Namun, jika OS mendeteksi ketika saluran dicolokkan ke jack headphone maka audio kemungkinan besar tidak dialihkan secara mekanis.

Saya menemukan bahwa mengganti headphone dan speaker sekaligus bekerja dengan sangat baik.


Screenshot hdajackretask untuk mengganti headphone ke speaker:

masukkan deskripsi gambar di sini


Setelah Anda mengklik "Terapkan sekarang" skrip shell dibuat untuk membuat perubahan dan meminta kata sandi pengguna super untuk mengeksekusi. Script juga disimpan /tmpyang dapat disalin dan kemudian dieksekusi dengan sudo dari baris perintah.

masukkan deskripsi gambar di sini

Eksekusi baris perintah

Seperti disebutkan sebelumnya, hdajackretaskmenciptakan naskah, script.shdi /tmpmirip dengan /tmp/hda-jack-retask-QW1EEZ/untuk fungsi jack yang Anda inginkan:

#!/bin/sh
echo "0x12 0x90a60140" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x14 0x90170150" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x17 0x40000000" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x18 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x19 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1a 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1b 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1d 0x40700001" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1e 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x21 0x40f000f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo 1 | tee /sys/class/sound/hwC0D0/reconfig 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log


Salin skrip ini di tempat lain di sistem Anda (selain / tmp)

cd /tmp/hda-jack-retask-QW1EEZ
cp script.sh ~username/speaker.sh

Kemudian edit speaker.sh

cd ~username
nano speaker.sh

Tambahkan baris killall pulseaudio &di bagian atas file. Ini diperlukan karena fungsi jack tidak dapat diubah saat pulseaudiosedang berjalan. Secara default pulseaudioakan muncul kembali. Juga ubah jalur ke errors.logfile ke /tmpatau ke mana pun Anda suka:

#!/bin/sh
killall pulseaudio &
echo "0x12 0x90a60140" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x14 0x90170150" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x17 0x40000000" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x18 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x19 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1a 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1b 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1d 0x40700001" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1e 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x21 0x40f000f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo 1 | tee /sys/class/sound/hwC0D0/reconfig 2>>/tmp/errors.log


Untuk menjalankan skrip:

sudo ./speaker.sh



Dari dokumentasi alsa-tools-1.1.5 / hdajackretask / README :

Dokumentasi untuk hdajackretask

Sebagian besar kartu suara Intel HDA sampai tingkat tertentu dapat ditarik kembali, yaitu dapat digunakan untuk lebih dari satu hal. Alat ini adalah GUI untuk memudahkan retask jack Anda - mis., Ubah jack Mic Anda menjadi Headphone tambahan, atau mengapa tidak membuat keduanya line out dan menghubungkannya ke penerima surround Anda?

Mulai cepat

Mulai aplikasi "hdajackretask" dari baris perintah. Pilih codec di bilah atas; beberapa orang hanya memiliki satu - jika Anda memiliki lebih dari satu, satu adalah yang "utama", dan sisanya mungkin merupakan codec HDMI.

Semua jack (dan input / output lainnya) ditampilkan di bawah "Konfigurasi pin". Untuk mengganti salah satu jack Anda, klik kotak centang "Override" untuk pin itu dan pilih fungsi yang diinginkan. Catatan: Jika Anda memilih override "Line out (back)", Anda juga harus memiliki override "Line out (depan)". Override "Line out (Center / LFE)" hanya akan bekerja dengan dua override sebelumnya, dan seterusnya.

Anda dapat mencoba konfigurasi baru Anda dengan mengklik "Daftar sekarang". Untuk membuat konfigurasi baru Anda menjadi boot up default, klik "Install boot override". Melakukan semua ini membutuhkan hak akses root, sehingga Anda kemungkinan akan diminta kata sandi.

Cepat

Apakah Anda mengacau? Klik tombol "Hapus boot override", dan setelah proses selesai, matikan komputer Anda, tunggu sebentar dan nyalakan lagi. Anda sekarang harus kembali ke tempat Anda mulai.

Apa itu bekerja?

Jika ya, berbahagialah, bagikan kegembiraan Anda, lakukan sesuatu yang baik!

Jika tidak, berikut adalah beberapa hal untuk dicoba:

  • Pergilah ke alsamixer dan lihat apakah ada kontrol volume baru, dan lihat apakah kontrolnya dibisukan dan disetel ke nilai yang masuk akal.

  • Terkadang pengemudi tidak mematikan pin yang tidak terhubung (jika tidak terhubung, mengapa khawatir?). Anda mungkin dapat memperbaiki ini dengan mematikan komputer Anda sepenuhnya untuk sementara waktu.

  • Lihat opsi "model = auto" di bawah ini

Jika ini tidak membantu, kemungkinan besar Anda mengalami keterbatasan driver atau perangkat keras. Anda mungkin mengalami bug driver (mungkin tidak ada yang pernah menguji empat headphone sebelumnya!). Jika Anda melakukannya, jangan ragu untuk melaporkannya di milis alsa-devel: namun, karena kurangnya tenaga kerja, kemungkinan hal ini akan ditangani dengan prioritas yang sangat rendah (memiliki suara yang bekerja di luar kotak untuk konfigurasi standar, adalah lebih penting daripada mendukung konfigurasi aneh). Namun, jika Anda adalah seorang peretas kernel dan menghasilkan tambalan yang memecahkan masalah Anda tanpa mengacaukan yang lain, kemungkinannya cukup tinggi itu akan digabungkan.

Jika Anda curiga masalahnya ada pada aplikasi GUI ini daripada driver kernel, jangan ragu untuk menulis email kepada saya (dan jika Anda suka, sertakan tambalan!). Jika demikian, tulis ke [email protected].

Pilihan

  • Tampilkan pin yang tidak terhubung BIOS Anda bertanggung jawab untuk mengatur pin apa pada codec yang sebenarnya terhubung ke sesuatu dan mana yang tidak. Terkadang BIOS bermasalah, dan tidak akan menampilkan semua jack Anda. Jika Anda memiliki jack yang tidak dimiliki BIOS Anda, Anda dapat mencoba mengaktifkan pin acak dan melihat apakah itu berfungsi.

  • Set Model = otomatis Beberapa codec, terutama yang lebih tua dan pada kernel 3.8 dan di bawah, diberi kode-keras untuk menggunakan model tertentu, dan dengan demikian tidak akan peduli dengan penggantian Anda. Dalam banyak kasus dan dengan kernel yang cukup baru, pengurai otomatis sekarang berfungsi dengan baik untuk codec ini juga. Anda dapat memaksa pengurai otomatis untuk digunakan dengan mencentang kotak ini. Namun, dalam beberapa kasus, model eksplisit ada karena suatu alasan, jika demikian, Anda mandek.

  • Advanced override Ini hanya untuk para ahli. Itu membuat Anda memilih setiap bidang konfigurasi secara individual, bukan hanya beberapa nilai yang telah ditentukan yang masuk akal. Perhatikan bahwa sebagian besar kombinasi di sini tidak valid dalam satu cara atau yang lain, jadi Anda mungkin tidak boleh mengacaukan ini kecuali Anda telah membaca dan memahami bagian "Default Konfigurasi" dari spesifikasi Audio HD. (Yang, pada saat penulisan ini, tersedia di sini: http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/high-definition-audio-specification. pdf )

  • Petunjuk Parser Ini memungkinkan Anda untuk mengirim "petunjuk" khusus ke driver yang menyebabkan parsing berperilaku berbeda. Biarkan mereka pada pengaturan "default" kecuali Anda telah membaca dokumentasi driver. (Yang, pada saat penulisan ini, tersedia di sini: https://www.kernel.org/doc/Documentation/sound/alsa/HD-Audio.txt - lihat bagian "Petunjuk string".)

stumblebee
sumber
1
Sayangnya itu tidak berhasil untuk saya, tetapi terima kasih atas jawaban Anda! Saat milik Anda mendekati apa yang saya harapkan dan tampaknya memberikan cara terbaik untuk mencapai tujuan (jika mungkin) Anda dianugerahi hadiah - selamat! :)
hidangan penutup
3

Dalam KDE ini dapat dilakukan:

pengaturan sistem -> multimedia -> pengaturan audio dan video -> tab pengaturan perangkat keras audio> pilih kartu suara yang sesuai> di bawah Connector Anda akan melihat opsi headphone dan speaker.

pengaturan sistem

haytham-med haytham
sumber
3
Saya tidak menggunakan KDE tetapi Unity memiliki "Pengaturan Suara" yang serupa. Mengubah perangkat output audio dari headphone ke speaker hanya akan membisukan headphone. Tampaknya menjadi peranti
penangkap
1

Gnome-Shell Extension Audio-Output-Switcher

cara paling sederhana adalah hanya menginstal ekstensi switcher output audio

atau Anda dapat mengkloning dengan git secara langsung:

git clone https://github.com/adaxi/audio-output-switcher.git ~/.local/share/gnome-shell/extensions/audio-output-switcher@anduchs

tangkapan layar

Ekstensi ini menambahkan sedikit entri ke menu status yang menunjukkan perangkat output audio-pulsa yang saat ini dipilih. Mengklik itu akan membuka submenu dengan semua perangkat output yang tersedia dan mari kita pilih yang mana yang akan digunakan.

Jastria Rahmat
sumber
Sayangnya itu tidak berhasil untuk saya, tetapi terima kasih atas jawaban Anda!
hidangan penutup
0

Anda bisa menggunakan Sound Switcher Indicator , jika Anda tidak keberatan menambahkan PPA.

Ini akan memberi Anda indikator dalam baki sistem yang dapat Anda klik untuk mengubah sumber audio input atau output. Anda dapat membaca lebih lanjut di http://yktoo.com/id/software/indicator-sound-switcher .

Metode Terminal

Untuk menginstal, menggunakan terminal, masukkan yang berikut ini.

sudo add-apt-repository ppa:yktooo/ppa
sudo apt-get update
sudo apt-get install indicator-sound-switcher

Metode GUI

Untuk menginstal, menggunakan GUI, ikuti langkah-langkah ini:

  1. Luncurkan aplikasi Perangkat Lunak & Pembaruan dari Unity Dash.

  2. Klik pada tab "Perangkat Lunak Lain". Kemudian tambahkan sumber baru berikut:

    deb http://ppa.launchpad.net/yktooo/ppa/ubuntu vivid main
    

    (Ingatlah untuk mengganti "vivid" dengan rilis Ubuntu Anda. Rilis yang didukung tercantum di http://ppa.launchpad.net/yktooo/ppa/ubuntu/dists/ ).

  3. Luncurkan Pusat Perangkat Lunak Ubuntu dari Unity Dash.

  4. Cari "Indikator pemilih input / output suara", dan pasang.

Catatan: Solusi ini tidak akan berfungsi jika sistem Anda memiliki sakelar perangkat keras di dalam jack Headphone, seperti yang disarankan Terrance di atas.

PJ Singh
sumber
Sebenarnya saya sudah menginstal ini. Seperti dalam catatan Anda, tampaknya ada sakelar perangkat keras.
user276318
0

Saya membuat skrip ini untuk masalah ini:

https://github.com/biplobsd/Fixing-front-panel-audio

Jalankan saja perintah yang diberikan dalam file README repositori di terminal Anda. Ini mengunduh dan menjalankan skrip.

Perintah-perintah itu adalah:

git clone https://github.com/biplobsd/Fixing-front-panel-audio.git
cd Fixing-front-panel-audio
chmod +x Fixing-front-panel-audio.sh
./Fixing-front-panel-audio.sh
Biplob SD
sumber