Переключение вывода с ноутбука на монитор

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
no avatar

Автор темы
anbore
Сообщения: 9
Зарегистрирован: 04 апр 2021, 20:57
Благодарил (а): 6 раз
Контактная информация:

Переключение вывода с ноутбука на монитор

#1

04 апр 2021, 23:03

Доброго времени суток.
Имеется ноут Lenovo ideapad 720 и монитор dell p2317.
Ноут подключаю к монитору по hdmi.
И у меня рабочий стол дублируется. По нажатию fn+f10 смены режима отображения не происходит (как в вин 10).
Как сделать так, чтобы по нажатию данной комбинации отключался экран ноута, а монитора продолжал работать?
Затем при еще одном нажатии происходило наоборот. А при 3й нажатии экран расширялся?

ОС: LM 20.1 x64, Cinnamon.
System:    Kernel: 5.4.0-70-generic x86_64 bits: 64 compiler: gcc v: 9.3.0 Desktop: Cinnamon 4.8.6 
           Distro: Linux Mint 20.1 Ulyssa base: Ubuntu 20.04 focal 
Machine:   Type: Laptop System: LENOVO product: 81C7 v: Lenovo ideapad 720-15IKB serial: <filter> 
           Mobo: LENOVO model: LNVNB161216 v: NO DPK serial: <filter> UEFI: LENOVO v: 6PCN18WW date: 02/23/2018 
Battery:   ID-1: BAT0 charge: 36.4 Wh condition: 36.4/45.0 Wh (81%) model: SMP L14M3P21 status: Full 
           Device-1: hid-34:88:5d:d1:f8:ea-battery model: Keyboard K380 charge: N/A status: Discharging 
           Device-2: hidpp_battery_0 model: Logitech Wireless Mouse charge: 55% (should be ignored) status: Discharging 
CPU:       Topology: Quad Core model: Intel Core i5-8250U bits: 64 type: MT MCP arch: Kaby Lake rev: A L2 cache: 6144 KiB 
           flags: avx avx2 lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx bogomips: 28800 
           Speed: 778 MHz min/max: 400/3400 MHz Core speeds (MHz): 1: 800 2: 800 3: 799 4: 800 5: 797 6: 800 7: 799 8: 800 
Graphics:  Device-1: Intel UHD Graphics 620 vendor: Lenovo driver: i915 v: kernel bus ID: 00:02.0 
           Device-2: AMD Lexa PRO [Radeon 540/540X/550/550X / RX 540X/550/550X] vendor: Lenovo driver: amdgpu v: kernel 
           bus ID: 01:00.0 
           Display: x11 server: X.Org 1.20.9 driver: amdgpu,ati,modesetting unloaded: fbdev,vesa resolution: 1920x1080~60Hz 
           OpenGL: renderer: Mesa Intel UHD Graphics 620 (KBL GT2) 
           v: 4.6 Mesa 21.1.0-devel (git-5c8a7fa 2021-03-31 focal-oibaf-ppa) direct render: Yes 
Audio:     Device-1: Intel Sunrise Point-LP HD Audio vendor: Lenovo driver: snd_hda_intel v: kernel bus ID: 00:1f.3 
           Sound Server: ALSA v: k5.4.0-70-generic 
Network:   Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet vendor: Lenovo driver: r8169 v: kernel port: c000 
           bus ID: 03:00.0 
           IF: enp3s0 state: down mac: <filter> 
           Device-2: Intel Dual Band Wireless-AC 3165 Plus Bluetooth driver: iwlwifi v: kernel port: c000 bus ID: 04:00.0 
           IF: wlp4s0 state: up mac: <filter> 
Drives:    Local Storage: total: 704.24 GiB used: 316.96 GiB (45.0%) 
           ID-1: /dev/nvme0n1 vendor: Plextor model: PX-256M9PeGN size: 238.47 GiB 
           ID-2: /dev/sda vendor: Samsung model: SSD 860 EVO 500GB size: 465.76 GiB 
Partition: ID-1: / size: 30.00 GiB used: 20.10 GiB (67.0%) fs: btrfs dev: /dev/nvme0n1p4 
           ID-2: /home size: 30.00 GiB used: 20.10 GiB (67.0%) fs: btrfs dev: /dev/nvme0n1p4 
Sensors:   System Temperatures: cpu: 37.5 C mobo: N/A gpu: amdgpu temp: 36 C 
           Fan Speeds (RPM): N/A 
Info:      Processes: 325 Uptime: 2h 23m Memory: 11.27 GiB used: 2.74 GiB (24.4%) Init: systemd runlevel: 5 Compilers: 
           gcc: 9.3.0 Shell: bash v: 5.0.17 inxi: 3.0.38 

Аватара пользователя

Chocobo
Сообщения: 10015
Зарегистрирован: 27 авг 2016, 22:57
Решено: 215
Откуда: НН
Благодарил (а): 815 раз
Поблагодарили: 3010 раз
Контактная информация:

Переключение вывода с ноутбука на монитор

#2

04 апр 2021, 23:09

anbore, можно поставить arandr и сохранить все три комбинации в соответствующие скрипты вызова xrandr

Ну а дальше организовать на хоткей какой-нибудь перебор их по очереди в bash, если на одну кнопку вешать.
Изображение
   
Изображение

no avatar

Автор темы
anbore
Сообщения: 9
Зарегистрирован: 04 апр 2021, 20:57
Благодарил (а): 6 раз
Контактная информация:

Переключение вывода с ноутбука на монитор

#3

04 апр 2021, 23:14

Chocobo, а запоминаться тип подключения будет, как в винде?
То есть если я выключу дисплей ноута, а монитора оставлю включенным.
То будет ли оно запоминаться при подключении ноута к монитору?
Chocobo писал(а):
04 апр 2021, 23:09
перебор их по очереди в bash,
Можете примерно показать.
Я просто пару недель минтом пользуюсь, не все знаю.

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#4

05 апр 2021, 12:36

anbore писал(а):
04 апр 2021, 23:14
Я просто пару недель минтом пользуюсь, не все знаю.
Для начала создайте и сохраните Ваши варианты через arandr. В результате у Вас должны появиться отдельные файлы сценариев на каждый вариант.
anbore писал(а):
04 апр 2021, 23:14
То будет ли оно запоминаться при подключении ноута к монитору?
Само ничего происходить не будет. Сохранять состояние можно в файл.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Chocobo
Сообщения: 10015
Зарегистрирован: 27 авг 2016, 22:57
Решено: 215
Откуда: НН
Благодарил (а): 815 раз
Поблагодарили: 3010 раз
Контактная информация:

Переключение вывода с ноутбука на монитор

#5

05 апр 2021, 12:54

demonlibra, в целом можно опрашивать и текущий xrandr, и исходя из его ответа понять какой включен сейчас потипу if или case конструкции.
Изображение
   
Изображение

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#6

05 апр 2021, 12:55

Тоже вариант.
Меня эта тема натолкнула на мысль заделать сценарий для быстрой смены разрешения экрана между 1368 и 1920.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#7

05 апр 2021, 14:51

anbore, можете подставить свои команды из arandr.

Код: Выделить всё

#!/bin/bash

# Сценарий переключения разрешения экрана

path_parameters="$HOME/.xrandr.conf"	# Путь к файлу сохранения последнего состояния

if [ -f "$path_parameters" ]
	then
		mode=`cat "$path_parameters"`	# Считывание последнего состояния, если файл существует
fi

if [ "$mode" = "1920" ]
	then
		xrandr --output eDP-1 --primary --mode 1368x768 --pos 0x0 --rotate normal --output HDMI-1 --off
		echo "1368" > "$path_parameters"

elif [ "$mode" = "1368" ]
	then
		xrandr --output eDP-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI-1 --off
		echo 1920 > "$path_parameters"
		
else echo 1368 > "$path_parameters"		# Корректировка файла сохранения последнего состояния, если файл пустой или содержит неверные данные
fi

Сделать файл xrandr.sh исполняемым.
Команда для запуска bash -c "$HOME/xrandr.sh"

Просто F10 без проблем. Как это назначить на Fn+F10 не знаю.
У меня acpi_listen на Fn+F10 и F10 выдают одно и тоже. Я так понимаю это зависит от железа.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

no avatar

Автор темы
anbore
Сообщения: 9
Зарегистрирован: 04 апр 2021, 20:57
Благодарил (а): 6 раз
Контактная информация:

Переключение вывода с ноутбука на монитор

#8

08 апр 2021, 23:28

demonlibra, написал такой скрипт:

Код: Выделить всё

#!/bin/bash
intern=eDP-1
extern=HDMI-1

if xrandr | grep "$extern disconnected"; then
    xrandr --output "$extern" --off --output "$intern" --auto
else
    xrandr --output "$intern" --off --output "$extern" --auto
fi
Но он у меня циклично не переключает. Как его дополнить чтобы по нажатию f10 включался экран монитора, выкл. экран ноута и наоборот?
И как это забиндить на f клавишу?
Можно ли сделать так, чтобы при подключении hdmi переключение происходило само?

Аватара пользователя

WWolf
Сообщения: 3897
Зарегистрирован: 14 фев 2018, 00:51
Решено: 31
Откуда: Краснодар
Благодарил (а): 1688 раз
Поблагодарили: 1212 раз
Контактная информация:

Переключение вывода с ноутбука на монитор

#9

08 апр 2021, 23:33

anbore писал(а):
08 апр 2021, 23:28
extern
разве не зарезервированное слово, которое низя использовать?

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#10

09 апр 2021, 04:16

anbore писал(а):
08 апр 2021, 23:28
Но он у меня циклично не переключает.
Не удивительно. У Вас выполнение условия зависит только от того подключен ли кабель HDMI-1 и от выполнения сценария это состояние не меняется.
Покажите вывод команд

Код: Выделить всё

intern=eDP-1
extern=HDMI-1
xrandr --output "$extern" --off --output "$intern" --auto
xrandr | grep "$intern"
xrandr | grep "$extern"
xrandr --output "$intern" --off --output "$extern" --auto
xrandr | grep "$intern"
xrandr | grep "$extern"
anbore писал(а):
08 апр 2021, 23:28
И как это забиндить на f клавишу?
Выполните в терминале команду acpi_listen
Нажмите на F10 и Fn+F10.
Будет ли разница в выводе?
anbore писал(а):
08 апр 2021, 23:28
Можно ли сделать так, чтобы при подключении hdmi переключение происходило само?
Покажите вывод udevadm monitor после подключения кабеля HDMI.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#11

09 апр 2021, 07:29

anbore писал(а):
08 апр 2021, 23:28
if xrandr | grep "$extern disconnected"
Спасибо. Не знал, что так можно. Я всегда писал:
if [[ `xrandr | grep "$extern disconnected"` ]]

Переделал свой сценарий переключения разрешение по Вашему подобию

Код: Выделить всё

#!/bin/bash

# Сценарий переключения разрешения экрана

output="eDP-1"	# Название выхода

if xrandr | grep "$output" | grep 1920
	then
		# Если текущее разрешение 1920, переключаем на 1368
		xrandr --output "$output" --primary --mode 1368x768 --pos 0x0 --rotate normal --output HDMI-1 --off

elif xrandr | grep "$output" | grep 1368
	then
		# Если текущее разрешение 1368, переключаем на 1920
		xrandr --output "$output" --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI-1 --off
fi


Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#12

09 апр 2021, 09:45

demonlibra писал(а):
09 апр 2021, 07:29
Спасибо. Не знал, что так можно. Я всегда писал:
Это несколько разные вещи.

1. Каждая команда/программа в линуксе, если она написана по правилам, при выходе оставляет т.н. errorcode - код результата. Если он равен 0 выполнение прошло успешно. И конструкция вида if program проверяет именно результат успешности выполнения программы. Что именно является "успехом" - в самой программе и заложено. А вот символ "|" - это передача вывода из предыдущей команды в следующую в качестве ввода. Потому конструкция if xrandr | grep "$output" | grep 1920 читается bash как проверка на успешность выполнения последнего в строчке grep (его errorcode). А его успех - это если он нашел во входящих подстрочку "1920".

2. "[" - это не синтаксис if, а особая, сокращенная форма записи команды test (закрывающая ] - это обязательный параметр особой формы вызова - [ ). Подробности про нее можно почитать в man test, но if с ее участием тоже проверяет всего лишь errorcode, с той лишь разницей что генерирует его test а не то что внутри него. (матрешка получается). Убедится в том что [ это отдельная программа/команда а не параметр/синтаксис if легко. Есть программа whereis которая показывает файл содержащий исполняемый код программы в файловой системе (полный путь). Напишите whereis [ и полюбуйтесь.

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#13

09 апр 2021, 21:04

anbore писал(а):
08 апр 2021, 23:28
Можно ли сделать так, чтобы при подключении hdmi переключение происходило само?
У меня пока не получается. Нужна помощь гуру.

Код: Выделить всё

udevadm info -a /sys/devices/pci0000:00/0000:00:02.0/drm/card0

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:02.0/drm/card0':
    KERNEL=="card0"
    SUBSYSTEM=="drm"
    DRIVER==""
    ATTR{gt_RPn_freq_mhz}=="300"
    ATTR{gt_min_freq_mhz}=="300"
    ATTR{gt_boost_freq_mhz}=="900"
    ATTR{gt_RP1_freq_mhz}=="300"
    ATTR{gt_max_freq_mhz}=="900"
    ATTR{gt_act_freq_mhz}=="300"
    ATTR{gt_cur_freq_mhz}=="300"
    ATTR{gt_RP0_freq_mhz}=="900"

  looking at parent device '/devices/pci0000:00/0000:00:02.0':
    KERNELS=="0000:00:02.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="i915"
    ATTRS{msi_bus}=="1"
    ATTRS{revision}=="0x07"
    ATTRS{current_link_speed}=="Unknown speed"
    ATTRS{max_link_width}=="255"
    ATTRS{subsystem_vendor}=="0x1025"
    ATTRS{ari_enabled}=="0"
    ATTRS{consistent_dma_mask_bits}=="39"
    ATTRS{vendor}=="0x8086"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{driver_override}=="(null)"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{device}=="0x1916"
    ATTRS{local_cpus}=="f"
    ATTRS{numa_node}=="-1"
    ATTRS{subsystem_device}=="0x1085"
    ATTRS{boot_vga}=="1"
    ATTRS{dma_mask_bits}=="39"
    ATTRS{irq}=="127"
    ATTRS{current_link_width}=="0"
    ATTRS{class}=="0x030000"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{max_link_speed}=="Unknown speed"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""


Создал файл /etc/udev/rules.d/hdmi.rules

Код: Выделить всё

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/bin/bash /home/demonlibra/.scripts/hdmi.sh"
Выполнил sudo udevadm control --reload-rules

Создал и сделал исполняемым сценарий hdmi.sh

Код: Выделить всё

#!/bin/bash
intern=eDP-1
extern=HDMI-1

if xrandr | grep "$extern disconnected"
	then
		xrandr --output "$extern" --off --output "$intern" --auto
	else
		xrandr --output "$intern" --off --output "$extern" --auto
fi

Но сценарий не выполняется при подключении кабеля HDMI. Видимо я условия запуска некорректно задаю.
Команда /bin/bash /home/demonlibra/.scripts/hdmi.sh в терминале выполняется.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#14

09 апр 2021, 23:39

demonlibra писал(а):
09 апр 2021, 21:04
Но сценарий не выполняется при подключении кабеля HDMI. Видимо я условия запуска некорректно задаю.
Я в udev правилах не эксперт, но IMHO, "ACTION=="change"" - это про изменение свойств самой видеокарты через ATTR. Вот тут вроде как решение именно этого вопроса: https://wiki.archlinux.org/index.php/ud ... 1%80%D0%B0

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#15

10 апр 2021, 08:30

Внёс правки в правило

Код: Выделить всё

KERNEL=="card0-HDMI-A-1", SUBSYSTEM=="drm", ATTR{status}=="connected", RUN+="/usr/local/bin/hdmi.sh true"
KERNEL=="card0-HDMI-A-1", SUBSYSTEM=="drm", ATTR{status}=="disconnected", RUN+="/usr/local/bin/hdmi.sh false"

Вывод команды udevadm test /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1
при подключении и отключении кабеля HDMI показывает, что триггер срабатывает. Но результат выполнения сценария не наблюдается.

Код: Выделить всё

...
Reading rules file: /etc/udev/rules.d/hdmi.rules
Reading rules file: /etc/udev/rules.d/powersafe.rules
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1
ACTION=add
SUBSYSTEM=drm
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
TAGS=:master-of-seat:seat:
ID_FOR_SEAT=drm-pci-0000_00_02_0
USEC_INITIALIZED=2687228
run: '/sbin/u-d-c-print-pci-ids'
run: '/usr/local/bin/hdmi.sh false'
Unload module index
Unloaded link configuration context.

Код: Выделить всё

Reading rules file: /etc/udev/rules.d/hdmi.rules
Reading rules file: /etc/udev/rules.d/powersafe.rules
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1
ACTION=add
SUBSYSTEM=drm
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
TAGS=:master-of-seat:seat:
ID_FOR_SEAT=drm-pci-0000_00_02_0
DISPLAY=:0
USEC_INITIALIZED=2687228
run: '/sbin/u-d-c-print-pci-ids'
run: '/usr/local/bin/hdmi.sh true'
Unload module index
Unloaded link configuration context.

Файл /usr/local/bin/hdmi.sh существует и исполняемый:

Код: Выделить всё

demonlibra@demonlibra-Extensa-2540:~$ cat /usr/local/bin/hdmi.sh
#!/bin/bash

intern=eDP-1
extern=HDMI-1

case $1 in
    true)
		xrandr --output "$intern" --off --output "$extern" --auto
    ;;
    false)
		xrandr --output "$extern" --off --output "$intern" --auto
    ;;
esac
demonlibra@demonlibra-Extensa-2540:~$ ls -l /usr/local/bin/hdmi.sh
-rwxr-xr-x 1 root root 212 апр 10 10:07 /usr/local/bin/hdmi.sh
В терминале команды bash /usr/local/bin/hdmi.sh true и bash /usr/local/bin/hdmi.sh false работают.
Только вот результата пока 0. Копаю дальше.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#16

10 апр 2021, 11:00

Создание логов немного помогло

Код: Выделить всё

KERNEL=="card0-HDMI-A-1", SUBSYSTEM=="drm", ATTR{status}=="connected", RUN+="/usr/bin/script -c '/usr/local/bin/hdmi.sh true' /tmp/hdmi.log"
KERNEL=="card0-HDMI-A-1", SUBSYSTEM=="drm", ATTR{status}=="disconnected", RUN+="/usr/bin/script -c '/usr/local/bin/hdmi.sh false' /tmp/hdmi.log"
Теперь при при ручной активации триггера sudo udevadm trigger -s drm сценарий hdmi.sh выполняется.
Для работы исполнения xrandr внёс коррективы.

Код: Выделить всё

#!/bin/bash

export XAUTHORITY=/home/demonlibra/.Xauthority
export DISPLAY=:0

intern=eDP-1
extern=HDMI-1

case $1 in
    true)
		xrandr --output "$intern" --off --output "$extern" --auto
    ;;
    false)
		xrandr --output "$extern" --off --output "$intern" --auto
    ;;
esac

Но при подключении и отключении кабеля HDMI, сценарий не запускается. Это видно по отсутствию лог файла.
Сценарий запускается только вручную командой в терминале sudo udevadm trigger -s drm
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#17

10 апр 2021, 11:17

demonlibra писал(а):
10 апр 2021, 11:00
Но при подключении и отключении кабеля HDMI, сценарий не запускается.
Проверьте - точно ли не запускается сам сценарий? Или просто не работает xrandr в нем? Добавьте в сценарий команду для записи какой-то строки в файл (например echo test >> test.txt в сам сценарий) и посмотрите. А то мучают меня смутные сомнения, что проблема здесь в том, что udev запускает сценарий в таком окружении, что у него доступа к пользовательской сессии иксов нету, и соответственно доступа к экрану пользователя. Если это так - там через dbus-launch химичить надо...

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#18

10 апр 2021, 11:33

С этой проверки я начал.

Код: Выделить всё

demonlibra@demonlibra-Extensa-2540:~$ cat /etc/udev/rules.d/hdmi.rules
KERNEL=="card0-HDMI-A-1", SUBSYSTEM=="drm", ATTR{status}=="connected", RUN+="/usr/bin/script -c '/usr/local/bin/hdmi.sh true' /tmp/hdmi.log"
KERNEL=="card0-HDMI-A-1", SUBSYSTEM=="drm", ATTR{status}=="disconnected", RUN+="/usr/bin/script -c '/usr/local/bin/hdmi.sh false' /tmp/hdmi.log"

demonlibra@demonlibra-Extensa-2540:~$ cat /usr/local/bin/hdmi.sh
#!/bin/bash

echo $1 > /tmp/hdmi

demonlibra@demonlibra-Extensa-2540:~$ ls -l /usr/local/bin/hdmi.sh
-rwxr-xr-x 1 root root 34 апр 10 13:23 /usr/local/bin/hdmi.sh
Подключаю HDMI

Код: Выделить всё

demonlibra@demonlibra-Extensa-2540:~$ cat /tmp/hdmi
cat: /tmp/hdmi: Нет такого файла или каталога
Отключаю HDMI

Код: Выделить всё

demonlibra@demonlibra-Extensa-2540:~$ cat /tmp/hdmi
cat: /tmp/hdmi: Нет такого файла или каталога
Пробую вручную. Кабель отключен.

Код: Выделить всё

demonlibra@demonlibra-Extensa-2540:~$ sudo udevadm trigger -s drm
demonlibra@demonlibra-Extensa-2540:~$ cat /tmp/hdmi
false
Подключаю HDMI

Код: Выделить всё

demonlibra@demonlibra-Extensa-2540:~$ cat /tmp/hdmi
false
demonlibra@demonlibra-Extensa-2540:~$ sudo udevadm trigger -s drm
demonlibra@demonlibra-Extensa-2540:~$ cat /tmp/hdmi
true
У меня идеи закончились. :dash2: С этим надо переспать.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#19

10 апр 2021, 11:57

Забыл написать самое главное: "Перезагружать ноут пробовал" :-D
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Переключение вывода с ноутбука на монитор

#20

10 апр 2021, 12:16

Код: Выделить всё

demonlibra@demonlibra-Extensa-2540:~$ sudo udevadm monitor -k -u -p
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[1179.098108] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
SUBSYSTEM=drm
HOTPLUG=1
DEVNAME=/dev/dri/card0
DEVTYPE=drm_minor
SEQNUM=8336
MAJOR=226
MINOR=0

UDEV  [1179.110005] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
SUBSYSTEM=drm
HOTPLUG=1
DEVNAME=/dev/dri/card0
DEVTYPE=drm_minor
SEQNUM=8336
USEC_INITIALIZED=2649928
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
ID_FOR_SEAT=drm-pci-0000_00_02_0
MAJOR=226
MINOR=0
DEVLINKS=/dev/dri/by-path/pci-0000:00:02.0-card
TAGS=:uaccess:seat:master-of-seat:

KERNEL[1198.981502] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
SUBSYSTEM=drm
HOTPLUG=1
DEVNAME=/dev/dri/card0
DEVTYPE=drm_minor
SEQNUM=8337
MAJOR=226
MINOR=0

UDEV  [1198.988140] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
SUBSYSTEM=drm
HOTPLUG=1
DEVNAME=/dev/dri/card0
DEVTYPE=drm_minor
SEQNUM=8337
USEC_INITIALIZED=2649928
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
ID_FOR_SEAT=drm-pci-0000_00_02_0
MAJOR=226
MINOR=0
DEVLINKS=/dev/dri/by-path/pci-0000:00:02.0-card
TAGS=:uaccess:seat:master-of-seat:
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Ответить

Вернуться в «Прочие устройства»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя