mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 01:00:29 +08:00
添加电源管理支持
USB HID 继电器支持 GPIO 添加初始文件
This commit is contained in:
parent
758ba42838
commit
0f39312eac
2
Makefile
2
Makefile
@ -284,12 +284,10 @@ run-stage-0:
|
|||||||
|
|
||||||
run-build-dev:
|
run-build-dev:
|
||||||
$(DOCKER) buildx build -t registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd:dev \
|
$(DOCKER) buildx build -t registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd:dev \
|
||||||
--progress plain \
|
|
||||||
--platform linux/amd64,linux/arm64,linux/arm/v7 \
|
--platform linux/amd64,linux/arm64,linux/arm/v7 \
|
||||||
-f build/Dockerfile . \
|
-f build/Dockerfile . \
|
||||||
--push
|
--push
|
||||||
$(DOCKER) buildx build -t silentwind0/kvmd:dev \
|
$(DOCKER) buildx build -t silentwind0/kvmd:dev \
|
||||||
--progress plain \
|
|
||||||
--platform linux/amd64,linux/arm64,linux/arm/v7 \
|
--platform linux/amd64,linux/arm64,linux/arm/v7 \
|
||||||
-f build/Dockerfile . \
|
-f build/Dockerfile . \
|
||||||
--push
|
--push
|
||||||
|
|||||||
@ -41,10 +41,10 @@ COPY web/ /usr/share/kvmd/web/
|
|||||||
COPY build/platform scripts/kvmd-gencert /usr/share/kvmd/
|
COPY build/platform scripts/kvmd-gencert /usr/share/kvmd/
|
||||||
COPY contrib/keymaps /usr/share/kvmd/keymaps
|
COPY contrib/keymaps /usr/share/kvmd/keymaps
|
||||||
COPY kvmd/ build/init.sh /kvmd/
|
COPY kvmd/ build/init.sh /kvmd/
|
||||||
COPY configs/kvmd/* /etc/kvmd_backup/
|
COPY configs/kvmd/ /etc/kvmd_backup/
|
||||||
COPY configs/nginx/* /etc/kvmd_backup/nginx/
|
COPY configs/nginx/ /etc/kvmd_backup/nginx/
|
||||||
COPY configs/janus/* /etc/kvmd_backup/janus/
|
COPY configs/janus/ /etc/kvmd_backup/janus/
|
||||||
COPY configs/hw_info/* /etc/kvmd_backup/hw_info/
|
COPY configs/hw_info/ /etc/kvmd_backup/hw_info/
|
||||||
COPY testenv/js/* /usr/share/janus/javascript/
|
COPY testenv/js/ /usr/share/janus/javascript/
|
||||||
|
|
||||||
ENTRYPOINT ["/kvmd/init.sh"]
|
ENTRYPOINT ["/kvmd/init.sh"]
|
||||||
@ -125,7 +125,7 @@ fi
|
|||||||
#Trying usb_gadget
|
#Trying usb_gadget
|
||||||
if [ "$OTG" == "1" ]; then
|
if [ "$OTG" == "1" ]; then
|
||||||
echo "Trying OTG Port..."
|
echo "Trying OTG Port..."
|
||||||
rm -r /run/kvmd/otg
|
rm -r /run/kvmd/otg &> /dev/null
|
||||||
modprobe libcomposite || echo -e "${RED}Linux libcomposite module modprobe failed.${NC}"
|
modprobe libcomposite || echo -e "${RED}Linux libcomposite module modprobe failed.${NC}"
|
||||||
python -m kvmd.apps.otg start \
|
python -m kvmd.apps.otg start \
|
||||||
&& ln -s /dev/hidg1 /dev/kvmd-hid-mouse \
|
&& ln -s /dev/hidg1 /dev/kvmd-hid-mouse \
|
||||||
|
|||||||
17
configs/kvmd/atx.sh
Executable file
17
configs/kvmd/atx.sh
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo $ATX
|
||||||
|
case $ATX in
|
||||||
|
GPIO)
|
||||||
|
CUSTOMATX=gpio
|
||||||
|
;;
|
||||||
|
USBRELAY_HID)
|
||||||
|
CUSTOMATX=usbrelay_hid
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "No thing."
|
||||||
|
exit -1
|
||||||
|
esac
|
||||||
|
|
||||||
|
#$1 option: short long reset
|
||||||
|
exec /etc/kvmd/custom_atx/$CUSTOMATX.sh $1
|
||||||
52
configs/kvmd/custom_atx/usbrelay_hid.py
Executable file
52
configs/kvmd/custom_atx/usbrelay_hid.py
Executable file
@ -0,0 +1,52 @@
|
|||||||
|
import sys
|
||||||
|
import hid
|
||||||
|
|
||||||
|
VENDOR_ID = 0x5131
|
||||||
|
PRODUCT_ID = 0x2007
|
||||||
|
|
||||||
|
def find_usbrelay():
|
||||||
|
for device in hid.enumerate():
|
||||||
|
if device.get("vendor_id") == VENDOR_ID and device.get("product_id") == PRODUCT_ID:
|
||||||
|
return device
|
||||||
|
return None
|
||||||
|
|
||||||
|
def send_command(device_info, channel, onoff):
|
||||||
|
device = hid.device()
|
||||||
|
device.open(device_info['vendor_id'], device_info['product_id'])
|
||||||
|
if device is None:
|
||||||
|
print("Failed to open device.")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
cmd = [0xA0, channel, onoff, 0xA0 + channel + onoff]
|
||||||
|
device.write(bytearray(cmd))
|
||||||
|
finally:
|
||||||
|
device.close()
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if len(sys.argv) != 3:
|
||||||
|
print("Usage:\n"
|
||||||
|
"\tpython script.py id on|off")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
id = int(sys.argv[1])
|
||||||
|
if sys.argv[2].lower() == 'on':
|
||||||
|
onoff = 1
|
||||||
|
elif sys.argv[2].lower() == 'off':
|
||||||
|
onoff = 0
|
||||||
|
else:
|
||||||
|
raise ValueError
|
||||||
|
except ValueError:
|
||||||
|
print("Invalid command, use 'on' or 'off'")
|
||||||
|
return
|
||||||
|
|
||||||
|
device_info = find_usbrelay()
|
||||||
|
if device_info is None:
|
||||||
|
print("USB relay not found")
|
||||||
|
else:
|
||||||
|
send_command(device_info, id, onoff)
|
||||||
|
print(f"Sent command to channel {id}: {'ON' if onoff else 'OFF'}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
20
configs/kvmd/custom_atx/usbrelay_hid.sh
Executable file
20
configs/kvmd/custom_atx/usbrelay_hid.sh
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
case $1 in
|
||||||
|
short)
|
||||||
|
python3 /etc/kvmd/custom_atx/usbrelay_hid.py 1 on
|
||||||
|
sleep 1
|
||||||
|
python3 /etc/kvmd/custom_atx/usbrelay_hid.py 1 off
|
||||||
|
;;
|
||||||
|
long)
|
||||||
|
python3 /etc/kvmd/custom_atx/usbrelay_hid.py 1 on
|
||||||
|
sleep 5
|
||||||
|
python3 /etc/kvmd/custom_atx/usbrelay_hid.py 1 off
|
||||||
|
;;
|
||||||
|
reset)
|
||||||
|
python3 /etc/kvmd/custom_atx/usbrelay_hid.py 2 on
|
||||||
|
sleep 1
|
||||||
|
python3 /etc/kvmd/custom_atx/usbrelay_hid.py 2 off
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "No thing."
|
||||||
|
esac
|
||||||
@ -45,6 +45,53 @@ kvmd:
|
|||||||
- "--h264-bitrate={h264_bitrate}"
|
- "--h264-bitrate={h264_bitrate}"
|
||||||
- "--h264-gop={h264_gop}"
|
- "--h264-gop={h264_gop}"
|
||||||
- "--slowdown"
|
- "--slowdown"
|
||||||
|
gpio:
|
||||||
|
drivers:
|
||||||
|
wol_server1:
|
||||||
|
type: wol
|
||||||
|
mac: 2c:56:dc:db:7c:1e
|
||||||
|
short_press:
|
||||||
|
type: cmd
|
||||||
|
cmd: [/etc/kvmd/atx.sh, short]
|
||||||
|
long_press:
|
||||||
|
type: cmd
|
||||||
|
cmd: [/etc/kvmd/atx.sh, long]
|
||||||
|
reset_press:
|
||||||
|
type: cmd
|
||||||
|
cmd: [/etc/kvmd/atx.sh, reset]
|
||||||
|
scheme:
|
||||||
|
wol_server1:
|
||||||
|
driver: wol_server1
|
||||||
|
pin: 0
|
||||||
|
mode: output
|
||||||
|
switch: false
|
||||||
|
short_button:
|
||||||
|
driver: short_press
|
||||||
|
pin: 0
|
||||||
|
mode: output
|
||||||
|
switch: false
|
||||||
|
long_button:
|
||||||
|
driver: long_press
|
||||||
|
pin: 0
|
||||||
|
mode: output
|
||||||
|
switch: false
|
||||||
|
reset_button:
|
||||||
|
driver: reset_press
|
||||||
|
pin: 0
|
||||||
|
mode: output
|
||||||
|
switch: false
|
||||||
|
view:
|
||||||
|
header:
|
||||||
|
title: 电源管理
|
||||||
|
table:
|
||||||
|
- ["#电源管理"]
|
||||||
|
- []
|
||||||
|
- ["#短按(开/关机):", short_button|按下]
|
||||||
|
- ["#长按(强制关机):", long_button|按下]
|
||||||
|
- ["#重启:", reset_button|按下]
|
||||||
|
- []
|
||||||
|
- ["#网络唤醒"]
|
||||||
|
- ["#被控机设备", wol_server1|网络唤醒]
|
||||||
|
|
||||||
vnc:
|
vnc:
|
||||||
keymap: /usr/share/kvmd/keymaps/ru
|
keymap: /usr/share/kvmd/keymaps/ru
|
||||||
|
|||||||
@ -140,6 +140,8 @@ class _GpioOutput: # pylint: disable=too-many-instance-attributes
|
|||||||
|
|
||||||
self.__region = aiotools.AioExclusiveRegion(GpioChannelIsBusyError, notifier)
|
self.__region = aiotools.AioExclusiveRegion(GpioChannelIsBusyError, notifier)
|
||||||
|
|
||||||
|
self.gettext=Languages().gettext
|
||||||
|
|
||||||
def is_const(self) -> bool:
|
def is_const(self) -> bool:
|
||||||
return (not self.__switch and not self.__pulse_delay)
|
return (not self.__switch and not self.__pulse_delay)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user