diff --git a/swaylock/main.c b/swaylock/main.c
index 020ff036..9b14086d 100644
--- a/swaylock/main.c
+++ b/swaylock/main.c
@@ -211,12 +211,12 @@ int main(int argc, char **argv) {
 	const char *usage =
 		"Usage: swaylock [options...]\n"
 		"\n"
-		"  -h, --help             Show help message and quit.\n"
-		"  -c, --color <rrggbb>   Turn the screen into the given color instead of white.\n"
-		"  -s, --scaling          Scaling mode: stretch, fill, fit, center, tile.\n"
-		"  -t, --tiling           Same as --scaling=tile.\n"
-		"  -v, --version          Show the version number and quit.\n"
-		"  -i, --image <path>     Display the given image.\n";
+		"  -h, --help                 Show help message and quit.\n"
+		"  -c, --color <rrggbb[aa]>   Turn the screen into the given color instead of white.\n"
+		"  -s, --scaling              Scaling mode: stretch, fill, fit, center, tile.\n"
+		"  -t, --tiling               Same as --scaling=tile.\n"
+		"  -v, --version              Show the version number and quit.\n"
+		"  -i, --image <path>         Display the given image.\n";
 
 	int c;
 	while (1) {
@@ -226,16 +226,22 @@ int main(int argc, char **argv) {
 			break;
 		}
 		switch (c) {
-		case 'c':
-			if (strlen(optarg) < 6) {
-				fprintf(stderr, "color must be specified in 3 byte format, e.g. ff0000\n");
+		case 'c': 
+		{
+			int colorlen = strlen(optarg);
+			if (colorlen < 6 || colorlen == 7 || colorlen > 8) {
+				fprintf(stderr, "color must be specified in 3 or 4 byte format, e.g. ff0000 or ff0000ff\n");
 				exit(EXIT_FAILURE);
 			}
 			color = strtol(optarg, NULL, 16);
-			color <<= 8;
-			color |= 0xFF;
+
+			if (colorlen == 6) {
+				color <<= 8;
+				color |= 0xFF;
+			}
 			sway_log(L_DEBUG, "color: 0x%x", color);
 			break;
+		}
 		case 'i':
 			image_path = optarg;
 			break;