Portál AbcLinuxu, 5. května 2025 15:20
systemctl status bumblebeed ● bumblebeed.service - Bumblebee C Daemon Loaded: loaded (/usr/lib/systemd/system/bumblebeed.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2020-07-22 10:33:32 CEST; 1 day 13h ago Main PID: 656 (bumblebeed) Tasks: 1 (limit: 18816) Memory: 17.2M CGroup: /system.slice/bumblebeed.service └─656 /usr/bin/bumblebeed --use-syslogTa služba si spouští další proces "Xorg :8 -config...", takže výpis pak vypadá takto:
systemctl status bumblebeed ● bumblebeed.service - Bumblebee C Daemon Loaded: loaded (/usr/lib/systemd/system/bumblebeed.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2020-07-22 10:33:32 CEST; 1 day 11h ago Main PID: 656 (bumblebeed) Tasks: 2 (limit: 18816) Memory: 30.6M CGroup: /system.slice/bumblebeed.service ├─ 656 /usr/bin/bumblebeed --use-syslog └─52090 /usr/lib/Xorg :8 -config ...Já bych potřeboval spustit svůj bash script ve chvíli kdy si služba bumblebeed spustí proces "Xorg :8 -config...". Existuje nějaká taková možnost v systemd? Vím, že existuje "Before", "After", ale to v tomto případě asi nepomůže.
Řešení dotazu:
Ten hlavní proces bumblebeed (nastartovaný systemd) zůstává pořád běžet?Ano, zůstává pořád běžet. Výpis služby vypadá takto:
systemctl cat bumblebeed # /usr/lib/systemd/system/bumblebeed.service [Unit] Description=Bumblebee C Daemon [Service] Type=simple ExecStart=/usr/bin/bumblebeed --use-syslog Restart=always RestartSec=60 [Install] WantedBy=multi-user.target
Potřebuji tudíž ihned po spuštění nové instance Xorg :8 spustit můj script, který na něm vypne klávesnci a myš.To vypadá jako rovnák na ohejbák. Nešlo by zařídit, aby se tam ta klávesnice a myš vůbec nepřipojila?
# 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" EndSectionJenomže, pak nefunguje klávesnice a myš na "Xorg :8" vůbec a nevím o tom, že by šla nějak zapnout bez resetu Xka. Já potřebuji přehazovat jednu klávesnici a jednu myš mezi oběma Xkama. Script na přepínání už mám hotový (řešil jsem v tom vedlejším vlákně). Jedině, že by existoval nějaký parametr při spuštění Xorg, něco jako "/usr/lib/Xorg :8 -disable input ...", ale jak jsem googlil, tak jsem nic takového nenašel. Všichni vypínají klávesnice, myši a touchpady pomocí xinput. Takže z toho mně vyplývá, že jediná varianta je: - nejdřív musím zapnout "Xorg :8", - potom pomocí xinput vypnout klávesnici a myš.
DISPLAY=:8 xinput --list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]Tudíž tam není načtena žádná klávesnice ani myš a proto nemohu příkazem
xinput --enable
žádné zařízení zapnout.
startx
ale přímo příkaz "/usr/lib/Xorg :8 ..." - viz níže v diskuzi.
DE na "Xorg :8" nespouštím. Spouštím tam jen windows managera (xfwm4) a daný program si spustím z "Xorg :0". Jako trochu jsem uvažoval, že na :8 spustím DE, ale:
za a) to teď nepotřebuji
za b) XFCE mi běží na "Xorg :0" a nejsem si jistý jestli je správné (bezpečné) spouštět XFCE ve druhé instanci na "Xorg :8" pod stejným uživatelem. Znamenalo by to, že obě instance budou používat stejné konfiguráky a nerad bych si XFCE rozhodil. Mohl bych použít jiný DE, ale zase mít 2 různé prostředí mně nepřijde moc přívětivé.
startx
nebo xinit
nebo si je spouští display manager. Samotný proces /usr/lib/Xorg
je nenačítá.
xinitrc
přidat něco jako
PROCS=$(ps -aux); TEST=$(echo -n "$PROCS" | grep "Xorg :8"); if [ -n "$TEST" ]; then transfer_input.sh fiale je to taky docela hack.
$HOME/.xinitrc
i do /etc/X11/xinit/xinitrc
. Nenačítá se xinitrc náhodou jen když se Xko startuje příkazem startx
? Bumblebee si dané Xko spouští napřímo, takto:
/usr/lib/Xorg :8 -config /etc/bumblebee/xorg.conf.nvidia \ -configdir /etc/bumblebee/xorg.conf.d -sharevts -nolisten tcp \ -noreset -verbose 3 -isolateDevice PCI:01:00:0 \ -modulepath /usr/lib/nvidia/xorg,/usr/lib/xorg/modules
ExecStartPost
pustít skript, který počká, dokud druhý Xorg nenastartuje a pak překonfiguruje vstupní zařízení.
ps aux | grep "Xorg :8"
, tak to mi moc nepomůže, protože služba bumblebeed.service se spouští hned při startu PC takže to bych ten script, který bude ve smyčce kontrolovat mohl zrovna spustit po nabootování a vyšlo by to nastejno.
Asi to udělám tak, že vytvořím wraper "muj_optirun.sh" o kterém jsem psal navrchu téhle diskuze. Stejně potřebuji při prvním spuštění "Xorg :8" spustit i windows manager, tak to dám všechno do toho wraperu. Zdá se mi to asi nejelegantnější řešení pokud to pomocí systemd nejde.
<fuj>optirun taky dělá že bumblebeed votevře socket byse toho možná dalo využít :O :O
ss | grep bum u_str ESTAB 0 0 /var/run/bumblebee.socket
</fuj>
[Unit] ConditionPathExists=/etc/sysconfig/cloudformationale mělo by to ověřovat jen při startu služby a přidávat k tomu timery bych dosáhl stejného efektu jako kdyby to kontroloval bash script ve smyčce. Ale existuje Path unit , která interně využívá inotify. Tohle se mi nezdá být až tak fuj. Nebo je na inotify (Path_unit) něco špatného?
/var/run/bumblebee.socket
nebo ps aux | grep "Xorg :8"
, tak to vyjde nastejno.
/tmp/.X11-unix/X8
. Jo to už *.path (inotify) zachytí a funguje to. Pokud se na jméno tohoto souboru dá spolehnout, tak takhle by to šlo.
$ cat ~/.config/systemd/user/bumblebee.path
[Unit] Description=Monitors whether /tmp/.X11-unix/X8 file (socket) exists. [Path] PathExists=/tmp/.X11-unix/X8 Unit=bumblebee-disable-kbd-mouse.service [Install] WantedBy=multi-user.target
$ cat ~/.config/systemd/user/bumblebee-disable-keyb-mouse.service
[Unit] Description=Executes script when a file (/tmp/.X11-unix/X8) defined in the bumblebee.path file exists. [Service] Type=simple ExecStartPre=/bin/sleep 1 ExecStart=/path/to/script/disable-kbd-mouse-xorg-8.sh [Install] WantedBy=multi-user.target
$ systemctl --user enable bumblebee.path
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.