Portál AbcLinuxu, 28. října 2025 15:45
# 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"
EndSection
Když 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:
pouziva tam starej postup, kdyz tak o odpoved nize, tam uz pouziva --enable a --disable a zaroven ne pred ciselne ID (ktere se muze zmenit a musel by ho v "hotkey skriptu" detekovat) ale primo nazev...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:
(pripravenej failback script prirazenej primo danemu ssh spojeni v klientovi)#!/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)
, ale SSH není třeba, stačí to vyřešit přes virtuální terminál (Ctrl-Alt-F2).
) jestli jde o sejne jmeno pro klavesnici a mys, tak to by melo jit ze v jmeno uvedes o co jde "pointer:Genius", "keyboard:Genius"...
jestli mas 2 klavesnice tak nemusis nic prepinat neDokonce 4 klávesnice
...ale jen podle výpisu. Fyzicky jednu.
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.
. Přikládám script, který pro mne funguje pomocí metody xinput. Poznatky s metodou xinput i s VT je i přímo ve scriptu - v helpu. Mám ještě jednu otázečku (úplně dole v tomto příspěvku).
Script:
#!/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.