Linux
树莓派3B 采用Samba + Cockpit搭建NAS
Linux 修改开机启动 boot splash logos
Linux 下将 .po 文件编译成 .mo 文件
Python 使用 gettext 模块实现国际化
XFCE 桌面优化配置
香橙派3B 使用 WiringOP 读取 MPU6050
香橙派4 LTS 安装 WiringPi
Linux 图形界面切换到 FB 界面
校表仪 tg-timer 算法笔记
Linux 安装 EtherCat Igh
EetherCat Igh 常用指令
树莓派镜像 DIY 制作
树莓派5B 安装64位实时系统 preempt RT 补丁
linux 的 lightdm 桌面管理器下隐藏光标(鼠标)
Linux 上使用 MPD (Music Player Daemon)
Linux 自动化交互式命令行工具 —— expect
Linux GTK 界面开发
Debian系统中修改主机名
使用Python + GTK3.0 开发嵌入式GUI
Raspberry Pi 5修改系统内存分页大小解决安装esp-matter 出现的<jemalloc>: Unsupported systeom page size 错误
树莓派 linux 安装和使用clash 做VPN
树莓派自动挂载硬盘
非控制台或ssh登录用户尝试启动Xorg图形服务器
XFCE4 电源管理器配置管理
Linux PulseAudio 声卡配置和检测
IBUS修改输入法和设置切换快捷键
在 Moode Audio 中实现开机自动启动 `startx`
crontab 任务
树莓派外设耗电检测
linux 终端自动登录
linux创建新用户
linux service通过xinit启动GTK应用程序
Linux 非桌面的图形环境安装和配置
香橙派3b板载音频输出没有声音调试
使用 udev 规则修改权限实现屏幕亮度调节
Linux udev 介绍
鲁班猫4 ubuntu22.04 屏幕背光 udev 自动配置化
ubuntu22.04 动态壁纸配置
使用 udisksctl 的可靠 USB 自动挂载方案(基于 systemd-run)
通过udev规则U盘自动挂载
OpenWRT 磊科N60pro路由器刷机
本文档使用 MrDoc 发布
-
+
首页
linux service通过xinit启动GTK应用程序
要通过 `.xinitrc` 实现 `bj-timer` 的自动启动,并确保在 ALSA 和 PulseAudio 就绪后运行,可以按照以下步骤操作: --- **1. 创建或修改 `~/.xinitrc` 文件** ```bash nano ~/.xinitrc ``` 在文件中添加以下内容(如果文件已存在,删除原有内容或在其基础上追加): ```sh #!/bin/sh # 等待 ALSA 和 PulseAudio 就绪 while ! pgrep -x "pulseaudio" >/dev/null; do sleep 1 done # 检查 ALSA 设备是否可用 while ! aplay -l | grep -q "card"; do sleep 1 done # 切换到工作目录并启动 bj-timer cd /home/bj/WorkShip/bj/0409 exec ./bj-timer ``` 关键点说明: • `pgrep -x "pulseaudio"`:检测 PulseAudio 进程是否已启动。 • `aplay -l | grep -q "card"`:检查 ALSA 设备是否可用。 • `exec ./bj-timer`:启动程序并接管当前进程(窗口管理器不会启动)。 --- **2. 赋予 `~/.xinitrc` 可执行权限** ```bash chmod +x ~/.xinitrc ``` --- **3. 配置 X11 自动登录并启动 `xinit`** **方法 1:通过显示管理器(如 LightDM/GDM)** 1. 编辑显示管理器配置(以 LightDM 为例): ```bash sudo nano /etc/lightdm/lightdm.conf ``` 2. 在 `[Seat:*]` 部分添加: ```ini autologin-user=bj autologin-user-timeout=0 session-command=/usr/bin/xinit /home/bj/.xinitrc -- :0 vt1 ``` **方法 2:直接修改 TTY 自动登录(无显示管理器)** 1. 编辑 `getty` 服务: ```bash sudo systemctl edit getty@tty1 ``` 2. 覆盖配置为: ```ini [Service] ExecStart= ExecStart=-/usr/bin/agetty --autologin bj --noclear %I $TERM ``` 3. 在 `~/.bash_profile` 末尾添加: ```bash if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then exec xinit ~/.xinitrc -- :0 vt1 fi ``` --- **4. 测试启动** • 手动测试: ```bash startx ~/.xinitrc ``` • 重启验证: ```bash sudo reboot ``` --- **5. 常见问题解决** **(1)PulseAudio 未启动** • 确保用户级 PulseAudio 服务已启用: ```bash systemctl --user enable --now pulseaudio ``` • 如果仍不生效,在 `~/.xinitrc` 中强制启动 PulseAudio: ```sh pulseaudio --start ``` **(2)ALSA 设备未就绪** • 检查 ALSA 驱动是否加载: ```bash lsmod | grep snd ``` • 手动加载驱动(如 Intel 声卡): ```bash sudo modprobe snd_hda_intel ``` **(3)`bj-timer` 启动后无显示** • 确保程序是 GUI 应用且依赖 X11。 • 如果需后台运行,改为: ```sh ./bj-timer & exec dwm # 或其他窗口管理器 ``` --- **6. 最终优化版 `~/.xinitrc`** ```sh #!/bin/sh # 等待 PulseAudio 和 ALSA 就绪 wait_for_audio() { while ! pgrep -x "pulseaudio" >/dev/null; do sleep 1 done while ! aplay -l | grep -q "card"; do sleep 1 done } # 启动音频服务(如果未运行) [ ! -f ~/.config/pulse/pid ] && pulseaudio --start # 等待音频就绪 wait_for_audio # 启动程序 cd /home/bj/WorkShip/bj/0409 exec ./bj-timer ``` --- **总结** | 步骤 | 操作 | |------------------------|--------------------------------------------------------------------------| | 1. 编辑 `~/.xinitrc` | 添加音频服务检测和程序启动逻辑 | | 2. 设置可执行权限 | `chmod +x ~/.xinitrc` | | 3. 配置自动登录 | 通过显示管理器或 TTY 自动启动 `xinit` | | 4. 测试 | 手动运行 `startx` 或重启系统验证 | 通过此配置,`bj-timer` 将在用户登录后自动启动,并确保音频服务已就绪! 🎵 # 问题 这个错误表明系统找不到 `~/.Xauthority` 文件,该文件用于存储 X11 的认证凭据。以下是完整的解决方案: --- **1. 手动创建 `.Xauthority` 文件** ```bash touch ~/.Xauthority chmod 600 ~/.Xauthority # 设置正确权限 ``` --- **2. 自动生成认证密钥(推荐)** 如果文件不存在,Xorg 通常会在登录时自动创建它。强制重新生成: ```bash rm -f ~/.Xauthority # 先删除残留文件(如果有) xauth generate :0 . trusted # 为默认显示:0生成密钥 ``` 或使用更安全的方式: ```bash xauth add $(hostname)/unix:0 . $(mcookie) ``` --- **3. 检查环境变量** 确保 `XAUTHORITY` 变量指向正确路径: ```bash echo $XAUTHORITY # 应显示 /home/bj/.Xauthority ``` 如果未设置,在 `~/.bashrc` 或 `~/.profile` 中添加: ```bash export XAUTHORITY=$HOME/.Xauthority ``` --- **4. 修复登录管理器配置** 如果是通过 LightDM/GDM 等登录管理器登录,检查是否正常创建了认证文件: ```bash sudo grep -r "Xauthority" /etc/lightdm/ # 检查显示管理器配置 ``` --- **5. 测试 X11 认证** ```bash xauth list # 应显示当前显示的密钥 xhost +local: # 临时允许本地用户访问(测试用) ``` --- **6. 在 systemd 服务中指定路径** 如果通过服务启动(如你的 `bj-timer.service`),在 `[Service]` 部分添加: ```ini Environment=XAUTHORITY=/home/bj/.Xauthority ``` --- **7. 终极解决方案** 如果问题仍然存在,可能是用户目录权限问题: ```bash sudo chown -R bj:bj /home/bj # 修复属主 sudo chmod 700 /home/bj # 修复目录权限 ``` --- **验证是否修复** ```bash ls -la ~/.Xauthority # 应显示 -rw------- 权限 xclock & # 测试简单 GUI 程序 ``` 完成这些步骤后,X11 认证问题应该解决!
qingkai
2025年5月13日 21:22
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码