Как создать сценарий переключения вывода xrandr?

Не совсем ясно, что вы ищете, но из того, что я получаю, это то, что у вас есть 6 каталогов, но в каждом каталоге есть файлы, названные аналогичным образом, с номерами в их конце. Тогда вы можете сделать это следующим образом:

for arg
do
   for i in {1..201..5}; do
      grep "Pitch" "$arg-$i" | cut -d" " -f25
   done > $arg/pitch.txt
   echo "========Pitch==========="
   cat $arg/pitch.txt
done
5
11.10.2016, 20:50
2 ответа

Это должно сработать:

xrandr --listactivemonitors | grep <BBB> >/dev/null && xrandr --output <BBB> --off || xrandr --output <BBB> --right-of <AAA> --mode 1920x1080

Пояснение:

  • xrandr --listactivemonitorsпечатает только те мониторы, которые в данный момент включены.
  • grep <BBB> >/dev/nullПоиск в предыдущем выводе имени монитора, который мы хотим переключить. Если он найден, grep вернет код выхода, который интерпретируется оболочкой как истинный. Если он не найден, он вернет код выхода, который интерпретируется оболочкой как false. Вывод отправляется в /dev/null, чтобы не загромождать экран.
  • && xrandr --output <BBB> --offЕсли grep найдет монитор в списке активных мониторов, то он запустится, отключив монитор. Но если grep завершился с ложным кодом выхода, то это не будет выполнено, потому что независимо от того, что он оценивает, логическое предложение and в целом уже известно как ложное.
  • || xrandr --output <BBB> --right-of <AAA> --mode 1920x1080Если grep не находит его, то выполняется этот пункт, включая монитор. Он выполняется, поскольку предыдущее предложение(grep... && xrandr...)оценивается как ложное. Чтобы узнать, верно ли это логическое или предложение, оболочка должна оценить правую часть. С другой стороны, если левая сторона -уже оценена как истина, тогда нет необходимости оценивать правую сторону -, поэтому это не будет выполнено.

Вот краткое описание потока управления, опосредованного логическими условиями.

5
27.01.2020, 20:41

Если вы не хотите иметь под рукой tmp-файл, когда в этом нет крайней необходимости, попробуйте этот(LVDS-1:дисплей ноутбука,VGA-1:внешний монитор):

#!/bin/sh

switchDisplay() {
  /usr/bin/xrandr --auto && /usr/bin/xrandr --output "$1" --off
}

case "$0" in
*-off)
  switchDisplay "VGA-1";
;;
*-on)
  switchDisplay "LVDS-1";
;;
*-toggle)
  ### Debian Buster xrandr man page is missing critical information.
  ### xrandr --listactivemonitors
  ### Monitors: 1
  ###  0: +VGA-1 1920/509x1080/286+0+0  VGA-1
  /usr/bin/xrandr --listactivemonitors | /bin/grep -q "VGA-1" 1>/dev/null 2>&1
  if test "$?" -eq 0; then
    switchDisplay "VGA-1"; ### VGA active, turn it off.
  else
    switchDisplay "LVDS-1"; ### VGA inactive, turn it on.
  fi;
;;
esac;

Скрипт называется ext-onв $PATH(, т.е.~/.local/binext-off, ext-toggleявляются символическими ссылками на расширение -вкл. Адаптируйтесь к вашим потребностям.

Удобство для пользователей i3wm с комбинацией клавиш Fn+-, добавить в~/.config/i3/config:

bindsym XF86Display             exec --no-startup-id ~/.local/bin/ext-toggle

Работает как шарм. Никогда не подводил меня ;)

ура

1
27.01.2020, 20:41

Теги

Похожие вопросы