【开发总结】如何用局域网的设备控制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.jsonnumber = data.get('number')# set audiores = 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.mzph.cn/news/831839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode—163. 缺失的区间【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—163. 缺失的区间 实现代码 class Solution { public:vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {int n nums.size();vector<vector<int>> an…

docker部署nginx并配置https

1.准备SSL证书&#xff1a; 生成私钥&#xff1a;运行以下命令生成一个私钥文件。 生成证书请求&#xff08;CSR&#xff09;&#xff1a;运行以下命令生成证书请求文件。 生成自签名证书&#xff1a;使用以下命令生成自签名证书。 openssl genrsa -out example.com.key 2048 …

目标检测——铁路轨道故障数据集

一、重要性及意义 安全性保障&#xff1a;铁路作为重要的交通工具&#xff0c;其安全性能直接关系到乘客和货物的安全。铁路轨道故障&#xff0c;如裂缝、变形、错位、缺失紧固件等&#xff0c;都可能引发列车脱轨、倾覆等严重事故。因此&#xff0c;及时发现和修复这些故障&a…

【LLM第二篇】stable diffusion扩散模型、名词解释

最近在整理大模型的相关资料&#xff0c;发现了几个名词&#xff0c;不是很懂&#xff0c;这里整理一下&#xff1a; stable diffusion&#xff08;SD)模型&#xff1a; 扩散模型&#xff08;Diffusion model&#xff09;的一种&#xff0c;主要用于生成高质量的图像&#xf…

论文阅读笔记(AAAI 20)Order Matters

个人博客地址 注&#xff1a;部分内容参考自GPT生成的内容 论文笔记&#xff1a;Order Matters&#xff08;AAAI 20&#xff09; 用于二进制代码相似性检测的语义感知神经网络 论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…

MongoDB的分片集群

MongoDB分片技术 介绍 ​ 分片&#xff08;sharding&#xff09;是MongoDB用来将大型集合分割到不同服务器上采用的方法。分片这种说法起源于关系型数据库。但是实际上非关系型数据库在分片方面相比于传统的关系型数据库更有优势。 ​ 与MySQL分库方案对比&#xff0c;MongoDB…

Hibernate的QBC与HQL查询

目录 1、Hibernate的QBC查询 2、Hibernate的HQL查询 3、NatvieSQL原生查询 1、Hibernate的QBC查询 Hibernate具有一个直观的、可扩展的条件查询API public class Test { /** * param args */ public static void main(String[] args) { Session sessio…

Deep Learning Part Eight--Attention 24.5.4

01.在翻译、语音识别等将一个时序数据转换为另一个时序数据的任务中&#xff0c;时序数据之间常常存在对应关系 引入了Attention的概念&#xff0c;介绍了Attention的注意力机制&#xff1a; 困难出现&#xff0c;seq2seq的问题引入&#xff1a;固定化长度问题&#xff08;过于…

【数学建模】矩阵微分方程

一、说明 我相信你们中的许多人都熟悉微分方程&#xff0c;或者至少知道它们。微分方程是数学中最重要的概念之一&#xff0c;也许最著名的微分方程是布莱克-斯科尔斯方程&#xff0c;它控制着任何股票价格。 ​​ 股票价格的布莱克-斯科尔斯模型 微分方程可以由数学中的许多…

java基于云计算的SaaS医院his信息系统源码 HIS云平台源码

目录 云HIS功能模块 1、预约挂号&#xff1a; 2、药库管理&#xff1a; 3、门诊医生站&#xff1a; 4、门诊费用&#xff1a; 5、药房管理&#xff1a; 6、治疗室&#xff08;门诊护士工作站&#xff09;&#xff1a; 7、统计分析&#xff1a; 8、财务管理&#xff1a;…

香蕉新鲜度等级识别香蕉成熟度识别分类数据集13478张4类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;13478 分类类别数&#xff1a;4 类别名称:["overripe","rip…

STM32G474 CMAKE VSCODE FREERTOS 导入

一. 文件准备 1. 首先下载 freertos FreeRTOS - Free RTOS Source Code Downloads, the official FreeRTOS zip file release download 2. 移动 FreeRTOS-Kenel 到 moto_control 文件夹下。 3. 将 FreeRTOSConfig.h 放到 /Core/Inc 下面 4. 由于 FreeRTOSConfig.h 中使用了…

腾讯云CentOS7使用Docker安装ElasticSearch与Kibana详细教程

文章目录 一、安装ElasticSearch二、安装Kibana 一、安装ElasticSearch 使用Docker拉取ElasticSearch镜像 这里版本选择的是7.15.2 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.22. 查看ElasticSearch的镜像id docker images3. 创建ElasticSearch容器 …

鸿蒙开发仿咸鱼TabBar

鸿蒙开发自定义TabBar&#xff0c;实现tabBar 上中间按钮凸起效果 第一步、定义数据模型 export default class TabItemData{defaultIcon: ResourceselectedIcon: Resourcetitle: stringisMiddle: booleanconstructor(defaultIcon:Resource, selectedIcon:Resource, title:st…

【C++】文件

目录 文件文件分类文本文件的读写(ASCII文件)的读写打开文件打开文件的方式关闭文件将数据写入ASCII文件从ASCII文件读入数据 二进制存储对比ASCII和二进制存储用成员函数read和write读写二进制文件打开方式文件的读入与读出 文件 所谓文件&#xff0c;一般指存储在外部介质上…

c#学习基础1

一、复杂数据类型 1&#xff09;概述 2&#xff09;枚举 1.基本概念 枚举是一个比较特别的存在&#xff0c;它是一个被命名的整形常量的集合&#xff0c;一般用它来表示状态&#xff0c;类型等 1.1申明枚举和申明枚举变量 1.2申明枚举语法 2.在哪里申明枚举 3.枚举的使用 4…

Java 获取 Outlook 邮箱的日历事件

Java 获取 Outlook 邮箱的日历事件 1.需求描述2.实现方案3.运行结果 IDE&#xff1a;IntelliJ IDEA 2022.3.3 JDK&#xff1a;1.8.0_351 Outlook&#xff1a;Microsoft Office 2016 1.需求描述 比如现在需要获取 Outlook 邮箱中四月的全部的会议安排&#xff0c;如下图所示 …

anaconda、cuda、tensorflow、pycharm环境安装

anaconda、cuda、tensorflow、pycharm环境安装 anaconda安装 anaconda官方下载地址 本文使用的是基于python3.9的anaconda 接下来跟着步骤安装&#xff1a; 检验conda是否成功安装 安装CUDA和cuDNN 提醒&#xff0c;CUDA和cuDNN两者必须版本对应&#xff0c;否者将会出错…

Educational Codeforces Round 165 (Rated for Div. 2) (C、D)

1969C - Minimizing the Sum 题意&#xff1a; 思路&#xff1a;观察到操作数很小&#xff0c;最值问题操作数很容易想到dp&#xff0c;用表示第个元素&#xff0c;操作了次的最小值总和&#xff0c;转移的时候枚举连续操作了几次即可&#xff0c;而连续操作了几次即将全部变成…

陈随易:论技术思维和产品思维

大家好&#xff0c;我是不被定义的前端之虎陈随易。 我的个人网站是&#xff1a;https://chensuiyi.me&#xff0c;欢迎大家眼熟我。 写这篇文章呢&#xff0c;源于一次群聊。 群友有一个产品&#xff0c;其中涉及到免费用户和付费用户对 pdf 的查看权限问题&#xff0c;使用…