Для этого есть утилита xcape. https://github.com/alols/xcape
Итак, решение, использующее xcape, включает выполнение следующей команды при запуске:
xcape -e 'Control_L=ISO_Level3_Shift|7;Control_R=ISO_Level3_Shift|0;Shift_L=Shift_L|8;Shift_R=Shift_R|9' -t 200 on startup
Если это применяется к другой раскладке клавиатуры, тогда команда должна быть другой.
Вы можете избежать двойных кавычек
printf '%b\n' "\"$(cat joyPhrase)\""
На моей машине
$ echo this is a file >> testfile
$ printf '%b\n' "\"$(cat testfile)\""
"this is a file"
Вместо использования cat вы можете использовать перенаправление:
$ printf '%b\n' "\"$(< testfile)\""
"this is a file"
espeak
поддерживает использование - stdin
для чтения из канала, поэтому один из вариантов - изменить вызов функции на используйте это вместо параметров и направьте вывод printf в свою функцию:
speak(){ espeak -a 200 -s 130 -v la --stdout --stdin | aplay; }
printf '%b\n' "$(cat joyPhrase)" | speak
Или вы можете передать вывод другой вашей команды в параметры speak
, как это (хотя это с меньшей вероятностью сработает, если есть управляющие символы):
speak $(printf '%b\n' "$(cat joyPhrase)")