diff --git a/newsfragments/1526.bugfix.rst b/newsfragments/1526.bugfix.rst
new file mode 100644
index 00000000..02e1d37c
--- /dev/null
+++ b/newsfragments/1526.bugfix.rst
@@ -0,0 +1,1 @@
+Calling `open_signal_receiver` with no arguments used to succeed without listening for any signals. This was confusing, so now it raises TypeError instead.
diff --git a/trio/_signals.py b/trio/_signals.py
index aca23dda..cee3b7db 100644
--- a/trio/_signals.py
+++ b/trio/_signals.py
@@ -129,6 +129,8 @@ def open_signal_receiver(*signals):
       signals: the signals to listen for.
 
     Raises:
+      TypeError: if no signals were provided.
+
       RuntimeError: if you try to use this anywhere except Python's main
           thread. (This is a Python limitation.)
 
@@ -144,6 +146,9 @@ def open_signal_receiver(*signals):
                  reload_configuration()
 
     """
+    if not signals:
+        raise TypeError("No signals were provided")
+
     if not is_main_thread():
         raise RuntimeError(
             "Sorry, open_signal_receiver is only possible when running in "

diff --git a/trio/tests/test_signals.py b/trio/tests/test_signals.py
index 7ae93040..20821b40 100644
--- a/trio/tests/test_signals.py
+++ b/trio/tests/test_signals.py
@@ -41,6 +41,12 @@ async def test_open_signal_receiver_restore_handler_after_one_bad_signal():
     assert signal.getsignal(signal.SIGILL) is orig
 
 
+async def test_open_signal_receiver_empty_fail():
+    with pytest.raises(TypeError, match="No signals were provided"):
+        with open_signal_receiver():
+            pass
+
+
 async def test_open_signal_receiver_restore_handler_after_duplicate_signal():
     orig = signal.getsignal(signal.SIGILL)
     with open_signal_receiver(signal.SIGILL, signal.SIGILL):

trio.open_signal_receiver should give an error if no arguments are passed
User confusion spotted in the wild: https://gitter.im/python-trio/general?at=5ebfa9d613878c30b581b9fe

trio/tests/test_signals.py::test_open_signal_receiver_empty_fail
trio/tests/test_signals.py::test_open_signal_receiver trio/tests/test_signals.py::test_open_signal_receiver_restore_handler_after_one_bad_signal trio/tests/test_signals.py::test_open_signal_receiver_restore_handler_after_duplicate_signal trio/tests/test_signals.py::test_catch_signals_wrong_thread trio/tests/test_signals.py::test_open_signal_receiver_conflict trio/tests/test_signals.py::test_open_signal_receiver_no_starvation trio/tests/test_signals.py::test_catch_signals_race_condition_on_exit