在linux下刷B站方法总结

本文总结了在Linux系统(特别是Ubuntu)下刷B站的步骤,包括安装Python 3、mpv媒体播放器、FFmpeg和Danmaku2ASS。遇到ffmpeg版本过旧导致的问题,可通过添加PPA源进行更新。同时,介绍了使用过程中切换弹幕显示、登录账号、解决连接问题以及调整弹幕速度和透明度等技巧。对于非Ubuntu系统,可能需要解决mpv和ffmpeg的安装问题,但具体方法未详述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景
由于linux下的浏览器对于flash支持实在是比较糟糕,在加上可能是bilibili的技术问题,导致在linux系统下刷B站,不是无限小电视就是弹幕乱码....

鄙人之前都是开win8虚拟机,开ie看,卡的那叫一个酸爽

不要问我为什么不装windows或者双系统,因为我想静静。

大神说要有B站,github上就涌现了很多项目,本次要介绍的是公认比较好用的方法——bilidan

--->github-Bilidan<---



需要安装

  • Python at least version 3.0
  • mpv Media Player, a fork of MPlayer with featuresBiligrab-Danmaku2ASS requires
  • FFmpeg with ffprobe installed
  • Danmaku2ASS, automatically installed

安装步骤

1.python请自行检查,这里不详细说明
2.mpv media player 如果你是Ubuntu可以直接 ubuntu软件中心里安装,其他系统源里应该也会有,所以不再详细叙述。
3.FFmpeg
1) ->
<think>嗯,用户想在Linux系统中用C语言编写一个程序,实现卡的同时屏幕亮起来。我需要仔细考虑如何解决这个问题。首先,我需要明确用户的具体需求,可能他们有一个读卡器,当用户卡时,系统检测到卡的信息,然后触发屏幕点亮。这可能涉及到硬件交互、事件监听以及屏幕控制等多个方面。 首先,我需要确定用户使用的读卡器类型。常见的读卡器有USB接口的,可能需要通过内核模块或用户空间的驱动来读取数据。不同的读卡器可能有不同的通信协议,比如HID或者其他自定义协议。用户可能需要先确认读卡器的型号,并找到对应的驱动或库来读取数据。例如,如果是RFID读卡器,可能需要使用libnfc这样的库。 接下来,卡事件的监听。在Linux系统中,设备通常会作为文件存在于/dev目录下。程序可能需要打开对应的设备文件,然后不断地读取数据。这通常涉及到轮询或者使用select、poll等系统调用来异步等待数据。例如,当卡被时,设备文件会有数据可读,程序可以捕获这个事件并处理。 然后,屏幕亮起的控制。现代Linux桌面环境通常使用DPMS(Display Power Management Signaling)来管理屏幕的电源状态。用户可能需要通过xset命令或者直接调用Xlib库来禁用屏幕保护、调整背光亮度或者唤醒屏幕。另外,如果是使用systemd的系统,可能可以通过logind的DBus接口来抑制睡眠或者控制屏幕。此外,某些硬件可能允许通过/sys/class/backlight接口调整背光,例如写入亮度值到对应的文件。 现在,需要将这些步骤整合到C语言程序中。首先,程序需要与读卡器通信,这可能需要打开特定的设备文件,配置正确的参数(如波特率、数据位等,如果是串口设备的话),然后循环读取数据。一旦检测到有效的卡信息,程序需要执行屏幕唤醒的操作。这可能包括执行系统命令如`xset dpms force on`,或者直接与X服务器通信。 可能的挑战包括权限问题,例如访问设备文件可能需要root权限或用户属于特定的组。此外,正确处理读卡器的数据格式,确保程序能准确识别卡事件。还有,屏幕唤醒的方法可能因不同的桌面环境和硬件而异,需要有一定的兼容性考虑。 另一个需要注意的点是,程序可能需要以守护进程的方式运行,持续监听读卡器的事件。这涉及到守护进程的编写,包括fork、setsid等系统调用,以及日志记录和信号处理。 总结一下,大致的步骤应该是: 1. 识别并配置读卡器设备。 2. 编写读卡数据读取的逻辑。 3. 检测到卡事件后,触发屏幕唤醒。 4. 处理权限和兼容性问题。 5. 可能将程序设置为守护进程。 需要验证每个步骤的可行性,比如测试xset命令是否有效,检查是否有权限访问/sys/class/backlight的文件,或者是否需要使用DBus接口。此外,错误处理也是关键,比如读卡器断开或屏幕控制命令失败时的处理。</think>在Linux系统中实现"卡同时亮屏"的功能需要结合硬件交互和系统控制,以下是分步骤实现方案: 一、硬件准备 1. 需要支持Linux的读卡器(如RFID/NFC读卡器) 2. 确认设备驱动正常(通过`dmesg | grep -i usb`查看设备识别) 3. 获取设备路径(通常在`/dev/ttyUSB*`或`/dev/hidraw*`) 二、核心开发步骤 1. 设备通信模块 ```c #include <fcntl.h> #include <termios.h> int open_reader(const char* device) { int fd = open(device, O_RDWR | O_NOCTTY); struct termios tty; tcgetattr(fd, &tty); cfsetospeed(&tty, B9600); // 设置波特率 tty.c_cflag &= ~PARENB; // 无奇偶校验 tty.c_cflag &= ~CSTOPB; // 1停止位 tcsetattr(fd, TCSANOW, &tty); return fd; } ``` 2. 卡事件监听 ```c void monitor_card(int fd) { char buffer[256]; while(1) { int n = read(fd, buffer, sizeof(buffer)); if(n > 0) { // 解析卡号(需根据读卡器协议实现) char* card_id = parse_card_data(buffer); wake_screen(); } usleep(100000); // 100ms轮询间隔 } } ``` 3. 屏幕唤醒实现(三种方式) ```c // 方式1:通过DPMS控制 void wake_screen() { system("xset dpms force on"); } // 方式2:直接设置背光亮度(需硬件支持) void set_backlight(int brightness) { int fd = open("/sys/class/backlight/intel_backlight/brightness", O_WRONLY); dprintf(fd, "%d", brightness); close(fd); } // 方式3:通过DBus唤醒(需要安装libdbus-dev) #include <dbus/dbus.h> void dbus_wake() { DBusConnection* conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); DBusMessage* msg = dbus_message_new_method_call( "org.gnome.ScreenSaver", "/org/gnome/ScreenSaver", "org.gnome.ScreenSaver", "SetActive"); DBusMessageIter args; dbus_message_iter_init_append(msg, &args); dbus_bool_t active = FALSE; dbus_message_iter_append_basic(&args, DBUS_TYPE_BOOLEAN, &active); dbus_connection_send(conn, msg, NULL); dbus_connection_flush(conn); } ``` 三、权限配置(必须步骤) ```bash # 创建udev规则(示例) echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="abcd", MODE="0666"' | sudo tee /etc/udev/rules.d/99-cardreader.rules sudo udevadm control --reload-rules ``` 四、编译与部署 ```bash gcc -o card_wake card_wake.c -ldbus-1 # 带DBus支持的编译 nohup ./card_wake & # 后台运行 ``` 注意事项: 1. 不同读卡器的数据协议差异较大,需参考具体设备文档 2. 图形界面唤醒需要DISPLAY环境变量正确设置 3. 建议增加去抖机制(如1秒内不重复唤醒) 4. 系统服务部署建议使用systemd unit文件 完整实现需要根据具体硬件参数调整,建议先用`cat /dev/ttyUSB0`(替换实际设备)测试原始数据读取,再逐步集成唤醒功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值