Portál AbcLinuxu, 6. května 2025 16:22
# If you connect a display to one of the outputs wired to the Nvidia card, you # have to comment this whole file. Note that you can leave it commented even # without currently attached monitor, at the cost of greater optirun startup # time. Section "InputClass" Identifier "IgnoreDevices" MatchDevicePath "/dev/input/event*|/dev/input/mouse*|/dev/input/js*|/dev/input/mice*" Option "Ignore" "true" EndSectionKdyž jsem ho zakomentoval, tak začala klávesnice a myš fungovat na :0 i na :8 současně. Já potřebuji, aby fungovala buď na jednom nebo druhém monitoru. Jde to? Googlením nemůžu nic najít nebo nevím co přesně hledat. PS: Nepotřebuji myší volně přejíždět mezi :0 a :8, ani nepotřebuji přetahovat okna mezi nimi, chci aby displeje od sebe zůstaly izolované.
Řešení dotazu:
DISPLAY=:0 xinput --disable "TPPS/2 IBM TrackPoint"pro detekci zda je zakazano:
DISPLAY=:0 xinput --list --long "TPPS/2 IBM TrackPoint" | grep disabledtakze to jen zkombinovat do skriptu, detekovat zda je na :0 mys aktivni:
#!/bin/sh keyboard="AT Translated Set 2 keyboard" mouse="TPPS/2 IBM TrackPoint" switch(){ DISPLAY=:0 xinput --${1} "${keyboard}" DISPLAY=:0 xinput --${1} "${mouse}" DISPLAY=:8 xinput --${2} "${keyboard}" DISPLAY=:8 xinput --${2} "${mouse}" } (DISPLAY=:0 xinput --list --long "${mouse}" | grep -q disabled) && switch enable disable || switch disable enable
#!/bin/sh set -e keyboard="AT Translated Set 2 keyboard" mouse="TPPS/2 IBM TrackPoint" switch(){ DISPLAY=:${1} xinput --enable "${keyboard}" DISPLAY=:${1} xinput --enable "${mouse}" DISPLAY=:${2} xinput --disable "${keyboard}" DISPLAY=:${2} xinput --disable "${mouse}" } (DISPLAY=:0 xinput --list --long "${mouse}" | grep -q disabled) && switch 0 8 || switch 8 0
kdyz se sekne tak poresit pres SSH ?Tak už se mi to stalo(pripravenej failback script prirazenej primo danemu ssh spojeni v klientovi)
jestli mas 2 klavesnice tak nemusis nic prepinat neDokonce 4 klávesnice
jde "pointer:Genius", "keyboard:Genius"...Nee, samotná klávesnice má úplně stejné názvy + další dva názvy (asi multimediální klávesy a ještě něco). S tím "vt8" se mi to už povedlo a funguje to. Při přepínání Ctrl-Alt-F7 .. F8 sám Xorg vypisuje že připojuje/odpojuje klávesnici, myš a dokonce i USB DVB-T. Otestuju to a pak označím řešení i když vídím, že už někdo projevil iniciativu
Třeba když se přepínací script sekne, tak bych zůstal bez klávesnice a myši.Daj volat s timeout. Ak to sekne, ukonci to po case 20s timeout a nejako to osetris, co bude robit ak sekne.
#!/bin/sh # Pokud se kláv. nebo myš objevuje ve výpisu "xinput --list" vícekrát, tak uveď # tu část názvu, která je shodná u všech. # Pokud je připojeno více HW klávesnic a myší a je požadavek je přepínat všechny, # tak lze použít krátký společný název pro všechny, např. "Keyboard" a "Mouse" keyboard="Logitech USB Keyboard" mouse="Logitech G700 Laser Mouse" display_main="0" display_b="8" switch(){ # default keyboard/pointer je pro případ, že v /etc/bumblebee/xorg.conf.nvidia bude Option "AutoAddDevices" "false". # devlist_* je pro případ, že jedno fyzické zařízení bude v systému jako více zařízení podobných nebo stejných názvů. devlist_mouse_1=$(DISPLAY=:"$1" xinput --list | grep "$mouse\|default pointer" | sed -n 's/.*id=\([0-9]\+\).*/\1/p') devlist_keyboard_1=$(DISPLAY=:"$1" xinput --list | grep "$keyboard\|default keyboard" | sed -n 's/.*id=\([0-9]\+\).*/\1/p') devlist_mouse_2=$(DISPLAY=:"$2" xinput --list | grep "$mouse\|default pointer" | sed -n 's/.*id=\([0-9]\+\).*/\1/p') devlist_keyboard_2=$(DISPLAY=:"$2" xinput --list | grep "$keyboard\|default keyboard" | sed -n 's/.*id=\([0-9]\+\).*/\1/p') if [[ "$devlist_mouse_1" == "" && "$devlist_keyboard_1" == "" ]]; then echo "Mouse and keyboard not found on DISPLAY :$1 or unable to connect to X server." else for dev in $devlist_mouse_1 $devlist_keyboard_1 do DISPLAY=:"$1" xinput --enable "$dev" done if [[ "$devlist_mouse_2" == "" && "$devlist_keyboard_2" == "" ]]; then echo "Mouse and keyboard not found on DISPLAY :$2 or unable to connect to X server." else for dev in $devlist_mouse_2 $devlist_keyboard_2 do DISPLAY=:"$2" xinput --disable "$dev" done fi fi } case "$1" in --switch-on-main) switch "$display_main" "$display_b" ;; --switch) # Pokud má myš stejný název pro různá ID, tak by příkaz s "--long" nefungoval. Vypisoval by # chybu: "Warning: There are multiple devices matching ..." #if ( DISPLAY=:"$display_main" xinput --list --long "$mouse" | grep -q disabled ) ; then id=$(DISPLAY=:"$display_main" xinput --list | grep "$mouse" | sed -n '1 s/.*id=\([0-9]\+\).*/\1/p') if [[ $(DISPLAY=:"$display_main" xinput list-props $id | grep 'Device Enabled' | awk '{print $4}') == "0" ]]; then switch "$display_main" "$display_b" else switch "$display_b" "$display_main" fi ;; --help|-h|*) echo "Použití: $0 [OPTION]" echo echo 'Tento script přepne klávesnici a myš předdefinovaného názvu mezi instancemi' echo 'Xorg spuštěnými na iGPU Intel (DISPLAY :0) a dGPU Nvidia (DISPLAY:8).' echo echo 'Při použití Nvidia-Bumblebee je tento script potřeba pouze když chceme' echo 'používat monitor připojený přímo k dGPU. Výsledkem je nejnižší možná latence.' echo 'Pro zprovoznění je potřeba:' echo '- v souboru /etc/bumblebee/xorg.conf.nvidia' echo ' zakomentovat řádek (nebo vložit správný port):' echo ' Option "ConnectedMonitor" "DFP"' echo ' změnit na true:' echo ' Option "UseEDID" "false"' echo ' Option "AutoAddDevices" "false" #bez toho by v "xinput --list" bylo: default keyboard/mouse' echo ' přidat řádek:' echo ' Option "AllowEmptyInitialConfiguration' echo '- zakomentovat obsah souboru /etc/bumblebee/xorg.conf.d/10-ignore-devices.conf' echo '- aplikace na dGPU Nvidia spouštět příkazem: DISPLAY=:8 optirun <application>' echo '- další aplikace na dGPU Nvidia lze spouštět příkazem: DISPLAY=:8 <application>' echo echo 'OPTION:' echo ' -h --help zobrazí tuto nápovědu' echo ' --switch-on-main zapne klávesnici a myš na DISPLAY :0 a vypne na DISPLAY :8' echo ' (vhodné použít při prvním spuštění procesu "Xorg :8", aby' echo ' klávesnice a myš nefungovaly zdvojeně na na obou diplejích)' echo ' --switch přepíná klávesnici a myš mezi DISPLAY :0 a DISPLAY :8 (při' echo ' prvním spuštění se zapne na DISPLAY :8 a vypne na DISPLAY :0)' echo echo 'Vytvoření klávesové zkratky:' echo '1) Pomocí programu, který je závislý na Xorg (např. windows managery, Xbindkeys)' echo ' hrozí, že pokud bude klávesnice a myš na DISPLAY :8 a proces' echo ' "Xorg :8" bude ukončen, tak se nepůjde přepnout zpět na "Xorg :0".' echo ' Nepůjde se přepnout ani na volný textový VT (tty2) a spustit tento' echo ' script ručně. Nejjednodušší je vypojit a znovunapojit klávesnici/myš z USB portu.' echo ' Nvidia-Bumblebee ve výchozím nastavení ukončí "Xorg :8" automaticky pokud na' echo ' DISPLAY :8 již neběží žádný jiný proces.' echo '2) Pomocí programu, který není závislý na Xorg (např. acpid, actkbd).' echo echo 'Varování:' echo 'Pokud bych se přepl na textový terminál (např. tty2) a zapl tento script, tak' echo 'všechny vstupy z klávesnice i myši se projeví na tty2 i na displeji :0/:8.' echo 'Podobná situace s duplicitou vstupů na obou displejích :0 a :8 nastane když:' echo '- napojím/znovunapojím klávesnici nebo myš,' echo '- poprvé spustím (nebo bumbebee spustí) proces "Xorg :8".' echo echo 'Poznámka (jiná možnost přepínání):' echo 'Pro přepínání klávesnice a myši lze použít i virtuální terminály (VT) a přepínat' echo 'tty7 a tty8 (Ctrl+Alt+F7/F8). V tom případě se nepoužívá optirun, ale přímo Xorg:' echo '1) z textového VT (tty1-tty6) příkazem:' echo ' /usr/lib/Xorg :8 vt8 -config /etc/bumblebee/xorg.conf.nvidia -configdir \' echo ' /etc/bumblebee/xorg.conf.d -nolisten tcp -noreset -verbose 3 -isolateDevice \' echo ' PCI:01:00:0 -modulepath /usr/lib/nvidia/xorg,/usr/lib/xorg/modules' echo '2) nebo z grafického (tty7) pomocí systemd:' echo ' systemd-run --property PAMName=login \' echo ' --property User=<my-user> \' echo ' --property StandardInput=tty \' echo ' --property TTYPath=/dev/tty8 \' echo ' sh -c "chvt 8 && /usr/lib/Xorg :8 vt8 -config /etc/bumblebee/xorg.conf.nvidia \' echo ' -configdir /etc/bumblebee/xorg.conf.d -nolisten tcp -noreset -verbose 3 \' echo ' -isolateDevice PCI:01:00:0 -modulepath /usr/lib/nvidia/xorg,/usr/lib/xorg/modules"' echo 'Samotná aplikace se spouští bez optirun příkazem: DISPLAY=:8 <application>' echo 'Při přepínání pomocí VT tento script není nutný, protože o přepínání klávesnice' echo 'a myši se stará VT v kernelu. Při použití VT je v jeden okamžik vidět výstup jen' echo 'na jednom monitoru (iGPU[:0] nebo dGPU[:8]). Na druhém monitoru je černá obrazovka.' exit 0 esac
⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ <default pointer> id=6 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ <default keyboard> id=7 [slave keyboard (3)]
Neexistuje někde v nastavení virtuálních konzolí v kernelu nebo v Xorg možnost, aby se grafický výstup na neaktivní tty nevypínal?Když nad tím přemýšlím, tak to z principu asi nepůjde. Když se přepnu na tty8, tak asi těžko půjde nastavit, aby tam zůstala grafika z tty7.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.