diff --git a/CONTRIBUTED.md b/CONTRIBUTED.md
index dd316464c0..4580727dc4 100644
--- a/CONTRIBUTED.md
+++ b/CONTRIBUTED.md
@@ -44,8 +44,8 @@ package openwrt-mwol: [Mleaf/openwrt-mwol](https://github.com/Mleaf/openwrt-mwol
package gargoyle: [ericpaulbishop/gargoyle](https://github.com/ericpaulbishop/gargoyle).
luci-app-qos-gargoyle source: [kuoruan/luci-app-qos-gargoyle](https://github.com/kuoruan/luci-app-qos-gargoyle).
luci-theme-rosy source: [rosywrt/luci-theme-rosy](https://github.com/rosywrt/luci-theme-rosy).
-luci-theme-argon-mc source: [sypopo/luci-theme-argon-mc](https://github.com/sypopo/luci-theme-argon-mc).
-
+luci-theme-argon-mc source: [sypopo/luci-theme-argon-mc](https://github.com/sypopo/luci-theme-argon-mc).
+luci-app-cupsd source: [F-Light/luci-app-cupsd](https://github.com/F-Light/luci-app-cupsd).
## License
### Depending on their own License.
diff --git a/package/ctcgfw/luci-app-cupsd/Makefile b/package/ctcgfw/luci-app-cupsd/Makefile
new file mode 100644
index 0000000000..fc17ebce89
--- /dev/null
+++ b/package/ctcgfw/luci-app-cupsd/Makefile
@@ -0,0 +1,15 @@
+#
+#-- Copyright (C) 2018 dz
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI Support for cupsd
+LUCI_DEPENDS:= +cups
+PKG_VERSION:=1.2
+
+include $(TOPDIR)/feeds/luci/luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/package/ctcgfw/luci-app-cupsd/luasrc/controller/cupsd.lua b/package/ctcgfw/luci-app-cupsd/luasrc/controller/cupsd.lua
new file mode 100644
index 0000000000..ec5acc619a
--- /dev/null
+++ b/package/ctcgfw/luci-app-cupsd/luasrc/controller/cupsd.lua
@@ -0,0 +1,17 @@
+#-- Copyright (C) 2018 dz
+
+module("luci.controller.cupsd", package.seeall)
+
+function index()
+ if not nixio.fs.access("/etc/config/cupsd") then
+ return
+ end
+
+ local page
+
+
+ entry({"admin", "services", "cupsd"},alias("admin", "services", "cupsd","page1"),_("CUPS 打印服务器"),60).dependent = true
+ entry({"admin", "services", "cupsd","page1"}, cbi("cupsd/page1"),_("设置"),10).leaf = true
+ entry({"admin", "services", "cupsd","page2"}, cbi("cupsd/page2"),_("高级"),20).leaf = true
+end
+
diff --git a/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page1.lua b/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page1.lua
new file mode 100644
index 0000000000..af7c4cb14b
--- /dev/null
+++ b/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page1.lua
@@ -0,0 +1,42 @@
+-- Copyright 2008 Yanira
+-- Licensed to the public under the Apache License 2.0.
+--mod by wulishui 20191205
+
+require("luci.model.ipkg")
+local fs = require "nixio.fs"
+require("nixio.fs")
+local uci = require "luci.model.uci".cursor()
+local cport = uci:get_first("cupsd", "cupsd", "port") or 631
+
+local m, s, o
+
+local running=(luci.sys.call("pidof cupsd > /dev/null") == 0)
+
+local button = ""
+local state_msg = ""
+
+if running then
+ state_msg = "" .. translate("~正在运行~") .. ""
+else
+ state_msg = "" .. translate("CUPS在睡觉觉zZZ") .. ""
+end
+
+if running then
+ button = "
------"
+end
+
+m = Map("cupsd", translate("CUPS打印服务器"))
+m.description = translate("CUPS是苹果公司为MacOS和其他类似UNIX的操作系统开发的基于标准的开源打印系统。".. button .. "
" .. translate("运行状态").. " : " .. state_msg .. "
")
+
+s = m:section(TypedSection, "cupsd", translate(""))
+s.anonymous = true
+
+s:option(Flag, "enabled", translate("Enable"))
+
+s:option(Value, "port", translate("WEB管理端口"),translate("可随意设定为无冲突的端口,对程序运行无影响。")).default = 631
+s.rmempty = true
+
+
+return m
+
+
diff --git a/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page2.lua b/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page2.lua
new file mode 100644
index 0000000000..4b54a11150
--- /dev/null
+++ b/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page2.lua
@@ -0,0 +1,29 @@
+local fs = require "nixio.fs"
+local sys = require "luci.sys"
+
+m = Map("samba", translate("CUPS高级配置"), translate("此处修改的是/etc/cups/cupsd.conf文件。"))
+s = m:section(TypedSection, "samba")
+s.anonymous=true
+
+o = s:option(TextValue, "/etc/cups/cupsd.conf")
+o.rows = 20
+o.wrap = "off"
+function o.cfgvalue(self, section)
+ return fs.readfile("/etc/cups/cupsd.conf") or ""
+end
+
+function o.write(self, section, value)
+ if value then
+ value = value:gsub("\r\n?", "\n")
+ fs.writefile("/tmp/cupsd.conf", value)
+ if (luci.sys.call("cmp -s /tmp/cupsd.conf /etc/cups/cupsd.conf") == 1) then
+ fs.writefile("/etc/cups/cupsd.conf", value)
+ luci.sys.call("/etc/init.d/cupsd reload >/dev/null")
+ end
+ fs.remove("/tmp/cupsd.conf")
+ end
+end
+
+return m
+
+
diff --git a/package/ctcgfw/luci-app-cupsd/root/etc/config/cupsd b/package/ctcgfw/luci-app-cupsd/root/etc/config/cupsd
new file mode 100644
index 0000000000..132a52ee97
--- /dev/null
+++ b/package/ctcgfw/luci-app-cupsd/root/etc/config/cupsd
@@ -0,0 +1,4 @@
+
+config cupsd 'config'
+ option enabled '0'
+ option port '631'
diff --git a/package/ctcgfw/luci-app-cupsd/root/etc/uci-defaults/luci-cupsd b/package/ctcgfw/luci-app-cupsd/root/etc/uci-defaults/luci-cupsd
new file mode 100755
index 0000000000..279f499120
--- /dev/null
+++ b/package/ctcgfw/luci-app-cupsd/root/etc/uci-defaults/luci-cupsd
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+ delete ucitrack.@cupsd[-1]
+ add ucitrack cupsd
+ set ucitrack.@cupsd[-1].init=cupsd
+ commit ucitrack
+EOF
+
+
+/etc/init.d/cupsd stop
+
+rm -f /tmp/luci-indexcache
+exit 0
diff --git a/package/ctcgfw/luci-app-cupsd/root/www/cups.pdf b/package/ctcgfw/luci-app-cupsd/root/www/cups.pdf
new file mode 100644
index 0000000000..42a52ef224
Binary files /dev/null and b/package/ctcgfw/luci-app-cupsd/root/www/cups.pdf differ