如何运行在登录屏幕之前启动的脚本?


17

我在校准触摸屏时,发现周围最好的工具是xinput_calibrator。所以我用了。它有两种选择(其中一种没有用),因此我在这里讨论第二种。它说我应该“在以X会话开头的脚本中”执行以下命令:

xinput set-int-prop "3M 3M USB Touchscreen - EX II" "Evdev Axis Calibration" 32 14410 2146 14574 2115

所以,我想~/.xinitrc~/.xsession并且~/.xsessionrc,所有这些是不存在的。所以我创建了它们,确切的内容就是这个命令。前两个文件使我的登录失败(登录后,我退回到登录屏幕)。

对于最后一个文件,校准功能正常,但仅在登录后才能执行...

在登录对话框出现之前,我需要运行该命令。我想到了将此命令添加到末尾而/etc/X11/xinit/xinitrc没有结果(什么都没有改变)。另外,我尝试将其添加到/etc/X11/Xsession.d/40x11-common_xsessionrc(在检查了一些文件之后)的末尾,但是结果与将其添加到中完全相同~/.xsessionrc

如何在登录屏幕显示之前运行此命令(这是在窗口管理器启动之前还是在X会话启动之前)?

(如果重要的话,我正在使用默认的窗口管理器运行Kubuntu)

更新当我使用Kubuntu时,我的显示管理器是kdm。正如已接受的答案所建议的那样,我编辑了文件/etc/kde4/kdm/Xsetup,并且如此处所述我在默认存在的命令之前添加了命令。它就像一个魅力:)


4
您正在使用什么登录管理器?对于gdm3你也许可以使用/etc/gdm3/Init/display/etc/gdm3/Init/Default- manpages.debian.net/cgi-bin/...
乌尔里希Dangel

嘿,好东西。我在这里[ unix.stackexchange.com/questions/172007/…]发布了一个问题,该问题被标记为该问答的可能重复项。但是,人们并不相信这是一个克隆。请也看到我的问题,并帮助我:)
kai14 2014年

Answers:


13

所有你试图改变文件在登录之后读出。此外,。~/.xinitrc并且~/.xsession是完整的命令集,在一个会话中运行; ~/.xinitrc在运行时xinitstartx从文本模式提示符下~/.xsession读取,在图形登录提示符下运行“自定义会话”(名称可能有所不同)时读取。

您需要配置显示管理器(显示登录提示的程序)。对于KDE显示管理器kdm,将您的命令添加到/etc/kde4/kdm/Xsetup(或/etc/kde3/kdm/Xsetup对于旧版本)(这是Debian上的路径,我尚未验证Kubuntu使用相同的路径)。

对于gdm(Gnome显示管理器),将命令添加到/etc/gdm/Init/Default。对于xdm(传统的X显示管理器),将命令添加到/etc/X11/xdm/Xsetup


感谢您的解释!我尝试了您的建议,但没有成功。我找到了Xsetup文件(与您提到的路径相同)并添加了命令。校准不起作用,但是我通过添加来确保它已执行,并在重启后echo "w" > /test.log确认/test.log确实存在。是否可能xinput需要特殊的“上下文”之类的东西?
jadkik94 2012年

实际上,无视最后的评论。我将xinput命令重定向到了该文件,似乎我在设备名称上添加了一个空格,这使得校准无法正常进行。您是100%正确的:)再次感谢。
jadkik94 2012年

5
只是为了完成答案-找出什么是您的显示管理器(不要与桌面环境混淆),请使用:cat /etc/X11/default-display-manager
Nux 2012年

xserverrc呢 那些在里面/etc/X11/xinit/xserverrc
CMCDragonkai

1
@CMCDragonkai如果有显示管理器,startx则不使用。因为它们在用户登录之前运行的显示管理器初始化脚本不会与此有关。
吉尔“SO-停止作恶”

4

我建议您创建自己的配置文件,这是一个简单的示例:

/usr/lib/X11/xorg.conf.d/20-calibration.conf

文件内容:

Section "InputClass"
         Identifier "Calibration"
         MatchProduct "3M 3M USB Touchscreen - EX II"
         Option "Calibration" "14410 2146 14574 2115"
EndSection

这应该够了吧。


-1

您可以尝试/etc/rc.local吗?


4
我担心该脚本会在X甚至启动之前运行(据我所知),这将使该脚本无用……何时运行?
jadkik94 2012年

3
@ jadkik94您是正确的,因为rc.local无法访问x会话,因此无法使用。
Ulrich Dangel

-1

使用OpenSUSE后,可以将脚本复制到/etc/init.d并运行insserv脚本名称。insserv启用脚本:http ://man-wiki.net/index.php/8:insserv 。


2
这可能不会工作的xinput需求大概X是不可用/在init脚本初始化
乌尔里希Dangel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.