【开发总结】如何用局域网的设备控制linux的电脑音量

问题背景

这个问题源于很无聊的一个习惯,如果我想躺在床上玩手机时,我一般会在桌子上摆放我的笔记本电脑,上面播放一部电视剧(通常是大明王朝1566),此时如果我想控制电脑的音量,那么我需要站起来,走到电脑前面,按下键盘上的控制按钮,这很不优雅,于是我在想,能否通过手机控制电脑音量的调节。也就有了此项目。

首先,我的电脑环境是linux和windows双系统,常用linux。版本为Ubuntu22.04。

经过搜索发现,linux平台控制电脑音量的方法可以通过amixer命令,chatgpt告诉我:

  1. 将音量设置为特定的百分比:
amixer -D pulse sset Master 50%

这会将音量设置为 50%。你可以更改 50% 的值来设置不同的音量。

  1. 将音量增加或减少特定的百分比:
amixer -D pulse sset Master 10%+  # 增加 10%
amixer -D pulse sset Master 10%-  # 减少 10%
  1. 静音和取消静音:
amixer -D pulse sset Master toggle

这会将音频静音或取消静音。

代码框架

首先确定使用python编写程序,只需要创建一个函数来控制实现对应的命令,在此笔者仅实现了最基础的设置某个值的功能。

def set_audio(number):
    value = str(number) + "%"
    # console.log(value)
    res = subprocess.call(["amixer", "-D", "pulse", "sset", "Master", value])
    return res

然后编写服务器框架将程序运行到电脑的某个端口上:

# 定义API路由
@app.route('/set_audio', methods=['POST'])
def process_number():
    data = request.json

    number = data.get('number')

    # set audio
    res = set_audio(number)
    
    if res == 0 :
        return jsonify({'set_audio': 200})
    else:
        return jsonify({'set_audio': 500})

if __name__ == '__main__':
    # 启动Flask应用
    app.run(host='0.0.0.0', port=5000)  # 允许外部访问

此处的代码是将程序运行到电脑的5000端口,可以通过向5000端口提post请求来实现将电脑音量调整到对应的百分之几上。
编写完成后通过python 命令或python3 命令运行程序。

客户端配置

笔者使用的手机是iphone 12,可以通过软件httpbot发送数据请求,将请求类型选择为post,地址填http://电脑地址:5700/set_audio。这个可以通过电脑命令行的内容看到,也可以通过查询自己电脑的局域网地址获得。
然后添加params,类型为raw。PostData选择{“number”, x},注意不要去掉number的双引号,这是json类型。
x值表示你想设置的音量为百分之几,0表示静音,100表示最大。

然后点击发送即可。

部署后台自动启动

此部分是我踩坑最久的一部分,GPT在此失误了,它指示我有三种方法可以选择:

  1. 使用 systemd(适用于 Linux):
    创建一个 systemd service 文件,用于定义你的 Python 服务器的配置。
    在 service 文件中设置 Restart=always 来表示服务在遇到错误时自动重启。
    使用 systemctl enable 命令将服务设置为开机自动启动。

  2. 使用 supervisor:
    安装并配置 Supervisor,一个进程控制系统,用于管理你的 Python 服务器进程。
    在 Supervisor 的配置文件中指定你的 Python 服务器,并设置 autorestart=true 来表示服务在遇到错误时自动重启。
    设置 Supervisor 为开机自动启动。

  3. 使用 crontab(仅适用于周期性任务):
    创建一个启动脚本,该脚本负责启动你的 Python 服务器。
    编辑 crontab,使用 @reboot 指令来指示在系统开机时运行你的启动脚本。

我在此选择的是第一种,但其实第二种也有坑,按照system的配置完成之后,发现并不能调整音量,似乎是用户的问题,在网上找了好久,最后找到了解决办法:
可以参考这篇帖子,但是原帖比较模糊,此处笔者直接给出系统的配置命令。

  1. 创建一个如下路径的文件:~/.config/systemd/user/your_server.service, 命名注意与后续保持一致。
  2. 内容如下
[Unit]
Description=Your Python Server
After=network.target

[Service]
ExecStart=/usr/bin/python3 /path/to/your/server.py
Restart=always
RestartSec=3

[Install]
WantedBy=default.target

注意此处的命令需要修改成可用的命令,其他内容无需修改。
这样配置既避免了需要获取user和group的尴尬,又可以很方便的实现后台自启和重启。

  1. systemctl --user daemon-reload 执行命令重新加载,注意此处和后续不需要sudo
  2. systemctl --user start your_server 启动
  3. systemctl --user enable your_server 设置自启

下面是一些有用的命令:
systemctl --user stop your_server 停止
systemctl --user status your_server 查看状态
systemctl --user disable your_server 禁用
删除的流程:
先stop,再disable,最后删除对应位置的文件。

代码开源

如果您对该项目感兴趣,最好下载此位置的源码。

添加Get支持

目前也可以通过Get请求设置参数的key为number,value为数值。地址依旧为上述地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/594269.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java】基本程序设计结构(二)

前言:上一篇我们详细介绍了Java基本程序设计结构中前半部分,一个简单的Java应用,注释,数据类型,变量与常量,运算符,字符串。包括本篇将延续上篇内容介绍后续内容,包括输入输出&#…

UE5 UMG

锚点 参考链接:虚幻5UI系统(UMG)基础(已完结)_哔哩哔哩_bilibili

政安晨:【Keras机器学习示例演绎】(三十七)—— 在计算机视觉中学习调整大小

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 本文目标:在计算机视觉中学习调整大小…

数据结构(十一)----图的应用

目录 一.最小生成树 1.Prim算法(普里姆) 2.Kruskal算法(克鲁斯卡尔): 二.最短路径(BFS算法) 1.单源最短路径 (1)BFS算法(无权图) (2)Dijkstra算法&…

QT+网络调试助手+TCP客户端

一、网络调试助手UI界面 编程主要思路: 首先将水平的控件 水平布局 ,然后相对垂直的控件 垂直布局 ,哪怕是底下的groupBox也需要和里面的内容 水平布局,然后最后框选全部 栅格布局。如果需要界面自适应窗口大小&#xff0c…

JavaScript js写九九乘法表(两种方法)

方法一: 观察规律: 第一个数每行都是自增1。 我们发下第二个数都是从1开始,依次递增1,永远不大于前面的数。 前面数字每自增一次,后面数字自增一轮。 我们可以用双重for循环,外层初始值设为i&#xff0…

【C++】对文章分词,并对词频用不同排序方法排序,比较各排序算法效率

文章分词 1.问题描述2.需求分析3.概要设计3.1 主程序流程3.2 函数调用关系 4.主函数实现4.1 main.h4.2 main.cpp 5. 函数实现5.1 processDic函数5.2 forwardMax函数5.3 countWordFreq函数5.4 quickResult函数5.5 其它排序算法效率…

【链表】:链表的带环问题

🎁个人主页:我们的五年 🔍系列专栏:数据结构 🌷追光的人,终会万丈光芒 前言: 链表的带环问题在链表中是一类比较难的问题,它对我们的思维有一个比较高的要求,但是这一类…

十二、泛型

这里写自定义目录标题 一、什么是泛型二、为什么需要泛型?三、自定义泛型结构1、泛型类2、泛型方法 四、泛型在继承上的体现五、通配符的使用1、注意点2、有限制的通配符 一、什么是泛型 泛型就是定义类、接口时通过一个标识表示类中某个属性的类型 、方法的返回值…

C#实现简单音乐文件解析播放——Windows程序设计作业2

1. 作业内容 编写一个C#程序,要求实现常见音乐文件的播放功能,具体要求如下:     1). 播放MP3文件: 程序应能够读取MP3文件,并播放其中的音频。     2). 播放OGG文件: 应能够播放ogg文件。     …

学习3:scrapy请求对象、模拟登录、POST请求、管道的使用、crawlspider爬虫类

请求对象 请求对象参数 scrapy.Request(url[],callback,method"GET",headers,body,cookies,meta,dont_filterFalse)callback 表示当前的url响应交给那个函数去处理method 指定请求方式headers 接受一个字典,其中不包括cookiesbody 接收json字符串&#…

OpenCV的周期性噪声去除滤波器(70)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV如何通过梯度结构张量进行各向异性图像分割(69) 下一篇 :OpenCV如何为我们的应用程序添加跟踪栏(71) 目录 目标 理论 如何消除傅里叶域中的周期性噪声? 源代码 解释 结果 目…

IDEA--debug

1. 单点调试的三个级别 Step into:在单步执行时,遇到子函数就进入并且继续单步执行。Step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数…

用树莓派2B当web服务器

树莓派2,卡片大小,arm 32位cpu,512G内存。我找了一下购买记录,2013年12月15日买的。带网线接头。属于树莓派2B。以前下载的操作系统还在。是2014年的操作系统,文件名是:2014-09-09-wheezy-raspbian_shumeip…

C语言之整形提升和算术转换

目录 前言 一、整形提升 二、算术转换 总结 前言 本文主要介绍C语言中的整形提升和算术转换的概念和意义,以及例题帮助理解,了解之后,我们就能知道在C语言中,字符型变量如何计算以及如果变量的类型、字节大小不一致的情况下&am…

前端工程化06-JavaScript模块化CommonJS规范ES Module

7、JavaScript模块化 在js开发中,他并没有拆分的概念,并不像java一样他可以拆分很多的包,很多的类,像搭积木一样完成一个大型项目的开发,所以js在前期的时候并不适合大型后端的项目开发,但是这些问题在后来…

Android 10.0 Launcher3 app页面调整workspace边距app行距变小功能实现

1.前言 在10.0的系统rom定制化开发中,在launcher3的一些开发定制功能中,在对于大分辨率比如1600*2560的设备进行开发的时候, 会在竖屏的时候,在默认7*4的布局的时候,显得行距有点宽,这样就需要调整整个CellLayout的上下左右边距,然后就 会显得行距会小一点,接下来具体…

ASP.NET网上书店

摘要 本设计尝试用ASP.NET在网络上架构一个电子书城,以使每一位顾客不用出门在家里就能够通过上网来轻松购书。本文从理论和实践两个角度出发,对一个具有数据挖掘功能电子书城进行设计与实现分析。论文首先较为详尽地介绍了面向对象分析与设计的有关概念…

基于Springboot的房屋租赁管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的房屋租赁管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

图中有几个三角形

让我们先把三角形进行分类:1块组成的三角形、2块组成的三角形、依此类推。 1块组成的三角形有4个: 2块组成的三角形有:12,13,14,23,24,34.其中,14,23构不成三角形. 3块组成的三角形有:123,124,134,234。但…
最新文章