我最近一直在研究这些东西,并发现了一些有关fglrx
Ubuntu 驱动程序的东西,我认为值得在更广泛的问题背景下分享。
该守护进程是在安装AMD 的专有驱动程序(用于 ATI 独立 GPU)atieventsd
时安装的守护进程。据我所知,其目的是监控各种事件,例如笔记本电脑盖关闭或交流电连接/断开,大概是为了让 GPU 知道以节省电量。请参阅fglrx
acpi
手册页了解更多信息。
在我的系统上,Ubuntu 13.10
并且使用 Catalyst 的最新驱动程序 13.12,守护进程会自行安装在 ,/etc/alternatives/x86_64-linux-gnu_atieventsd
并使用指向 的符号链接/usr/bin/atieventsd
。
问题1:
Sys-V-init 脚本/etc/init.d/atieventsd
认为符号链接在其他地方,即/usr/sbin/atieventsd
(即sbin
不在实际所在位置,bin
)
因此,为了atieventsd
在启动时成功启动,我必须进行以下更改:
DAEMONPATH=/usr/bin/atieventsd
同时,添加调试选项也很方便,目前还有第二个附加日志:
DAEMONOPTS="--debug --logfile=/var/log/atieventsd.log"
然后删除/重新生成运行级别:
cd /etc/init.d
mv atieventsd atieventsd.temp
update-rc.d atieventsd remove
mv atieventsd.temp atieventsd
update-rc.d atieventsd defaults
这至少应该可以让守护进程正确启动/停止。你可以用 进行测试service atieventsd start
。
问题2:
每次启动时,守护进程都会尝试启动一个脚本/etc/ati/authatieventsd.sh
(默认情况下),其目的是授予atieventsd daemon
对 X 服务器显示的授权访问权限,以便它可以向其发送各种命令。
此脚本被atieventd
类似地调用(ps aux | grep atieventsd
启动服务或引导后查看)
/etc/ati/authatieventsd.sh grant :0 /tmp/atieventsdGWt098
这里的第一个参数($1
)是动作:授予/撤销
,第二个参数($2
)是 X 显示编号(例如:0
),第三个参数($3
)是需要权限的文件。请参阅xauth
手册页了解更多背景信息。
问题是,如果你看一下脚本,/etc/ati/authatieventsd.sh
你会发现它不支持lightdm
,你需要在函数中添加代码块GetServerAuthFile()
:
#Check lightdm
LIGHTDM_AUTH_FILE=/var/run/lightdm/root/$1
if [ -e $LIGHTDM_AUTH_FILE ]; then
SERVER_AUTH_FILE=$LIGHTDM_AUTH_FILE
DISP_SEARCH_STRING="unix$1"
return 0
fi
以允许它找到正确的服务器身份验证文件。保存此文件,下次停止/启动(或下次重新启动)时,您应该会在/tmp
目录中看到一个文件,格式为atieventsdGWt098
atieventd
xauth -f /tmp/atievntX.Dh1AJV list
你应该得到类似
yourHostname/unix:0 MIT-MAGIC-COOKIE-1 98deg034234kkn34234mmm3242
表明守护进程确实已被授予权限。
您还可以查看/var/log/atieventsd.log
日志,您应该看到现在一切都正常工作,并且守护进程正在响应诸如拔掉空调和盖子关闭等事件。例如:
<Dbg>: ACPI event: ac_adapter AC 00000080 00000000
<Dbg>: ACPI event: processor CPU0 00000081 00000000
processor CPU1 00000081 00000000
processor CPU2 00000081 00000000
processor CPU3 00000081 00000000
更广泛的问题
这atieventsd
在现代驱动程序中真的有必要吗?电源管理方式是否有所不同?守护进程是否已成功,并且这个东西损坏并非偶然?它真的是故意损坏的吗?